@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr 10 ;SOURCE.050 LINES 40-6020 ;TOUCH TABLET LOADER, READS HEADER AND INCLUDES HORIZONTAL LOAD FORMAT. SEE SOURCE.051 FOR V}ERTICAL FORMAT.30 *= $380040 ICBAL = $034450 ICBAH = $034560 ICBLL = $034870 ICBLH = $034980 ICCOM = $}034290 CIOV = $E4560100 SCN = $CB0110 CHAN = $D1 ;STORES OPENED CHANNEL FOR THIS AND NEXT MACH PROGRAM, KOALAV.S}RC0120 YHOLD = $CE0130 LSB = $CF0140 MSB = $D00150 COMP = $D4 ;TYPE OF COMPRESSION, 1 FOR VERTICAL ,2 FOR HORIZO}NTAL:ALSO RETURNED IN RETURN VARIABLE0160 PLA 0170 PLA 0180 PLA 0190 TAX ;CHANNEL *160200 ST }A CHAN0210 LDA #70220 STA ICCOM,X ;COMMAND BYTE0230 LDA #00240 STA ICBLH,X ;HI BYTE LENGTH0250 STA I }CBAH,X ;SINCE ADDRESS FOR HEADER IS $D60260 STA $D5 ;HI BYTE OF RETURN VARIABLE0270 LDA #80280 STA ICBLL,X } ;SKIP FIRST 7 BYTES IN HEADER & PLACE 8th IN ACCUM0290 LDA #$D6 ;SAFE PLACE TO DISCARD THE FOLLOWING DATA0300 S }TA ICBAL,X0310 LDA 88 ;LO OF SCREEN ADDRESS0320 STA SCN0330 LDA 890340 STA SCN+10350 JSR CIOV } ;GET DATA WTIH 8th (compression type) IN ACCUM.0360 STA COMP0370 LDA #5 ;SKIP NEXT 5 DATA BYTES0380 STA} ICBLL,X0390 JSR CIOV0400 LDA #708/256 ;GET AND PLACE 5 COLOR REGISTER DATA0410 STA ICBAH,X0420 LDA #708&}2550430 STA ICBAL,X0440 JSR CIOV0450 LDA #$D60460 STA ICBAL,X0470 LDA #90480 STA ICBLL,X0490 } JSR CIOV ;SKIP REMAINING HEADER0500 LDA SCN0510 STA ICBAL,X0520 LDA SCN+10530 STA ICBAH,X ;RESET TO} SCREEN LOCATION0540 LDA COMP0550 CMP #20560 BEQ GT9 ;FOR A HORIZONTAL COMPRESSION0570 DONE RTS ;V}ERTICAL COMPRESSION USE NEXT MACH PROGRAM. CHAN MUST BE IN $D1 & COMP IN $D4 WITH $D5=00580 GT9 LDA #00590 STA ICBLH,X}0600 STA ICBLL,X ;SPECIAL CASE; SINGLE DATA LOAD INTO ACCUM0610 GT0 JSR CIOV0620 BMI DONE ;ERROR WHEN END OF FIL}E0630 CMP #00640 BEQ GT1 ;FOR MSB,LSB,REPEATED DATA0650 CMP #1280660 BEQ G2 ;FOR MSB,LSB,UNIQUE }DATA0670 BCS G3 ;FOR <128 UNIQUE DATA0680 STA YHOLD ;FOR <128 REPEATED DATA0690 JSR CIOV ;GET DATA T}O REPEAT0700 LDY YHOLD0710 DEY 0720 GT7 STA (SCN),Y0730 DEY 0740 BPL GT7 ;Y CAN ONLY BE 0 TO 126075}0 LDA YHOLD ;SET NEW SCREEN ADDRESS0760 CLC 0770 BCC G10780 GT1 JSR CIOV ;MSB0790 STA MSB0800 J}SR CIOV ;LSB0810 STA LSB0820 JSR CIOV ;DATA TO BE REPEATED0830 LDY #00840 LDX MSB0850 BEQ GT2}0860 GT3 STA (SCN),Y0870 INY 0880 BNE GT30890 INC SCN+1 ;DO FULL PAGES FIRST0900 DEX 0910 BNE GT3}0920 GT2 LDX LSB0930 BEQ GT50940 GT4 STA (SCN),Y0950 INY 0960 DEX 0970 BNE GT40980 GT5 LDX CHAN0990 } CLC 1000 TYA ;PREPARE SCREEN LOCATION1010 G1 ADC SCN1020 STA SCN1030 BCC GT91040 INC SCN+110}50 BNE GT91060 GT8 BNE GT91070 G3 AND #127 ;CLEAR 7th BIT1080 STA ICBLL,X ;<128 UNIQUE DATA ROUTINE1090 L}DA SCN+11100 STA ICBAH,X1110 LDA SCN1120 STA ICBAL,X ;DESTINATION SET1130 JSR CIOV ;MOVE DATA, ONE FOR} ONE1140 LDA ICBLL,X ;LENGTH AGAIN & SET NEW SCREEN LOCATION1150 CLC 1160 BCC G11170 G2 JSR CIOV ;MSB118}0 STA MSB1190 JSR CIOV ;LSB1200 STA ICBLL,X1210 LDA MSB1220 STA ICBLH,X ;LENGTH NOW SET1230 L }DA SCN+11240 STA ICBAH,X1250 LDA SCN1260 STA ICBAL,X ;ADDRESS SET1270 JSR CIOV ;TRANSFER ALL DATA1280!} CLC 1290 LDA ICBLL,X1300 ADC SCN1310 STA SCN1320 LDA ICBLH,X1330 ADC SCN+11340 STA SCN+11"}350 BNE GT8 LDA ICBLL,X1300 ADC SCN1310 STA SCN1320 LDA ICBLH,X1330 ADC SCN+11340 STA SCN+1110 ; SOURCEA.050 LINES 80-11020 ;VERTICAL LOAD COMPANION TO SOURCE.05030 *= $380040 ICBAL = $034450 ICBAH = $} $034560 ICBLL = $034870 ICBLH = $034980 ICCOM = $034290 CIOV = $E4560100 SCN = $CB0110 XHOLD = $CD0120 YH%}OLD = $CE0130 LSB = $CF0140 MSB = $D00150 CHAN = $D10160 COL = $D40170 DATA = $D50180 TEMP = $D60190 PLA &}0200 LDA CHAN0210 TAX ;CHANNEL *160220 LDA #70230 STA ICCOM,X ;COMMAND BYTE0240 LDA #00250 '} STA XHOLD0260 STA YHOLD0270 LDA 880280 STA SCN0290 STA ICBAL,X0300 LDA 890310 STA SCN+1032(}0 STA ICBAH,X0330 LDA #390340 STA COL0350 GT9 LDX CHAN0360 LDA #00370 STA ICBLH,X0380 STA ICBLL)},X ;SPECIAL CASE; SINGLE DATA LOAD INTO ACCUM0390 GT0 JSR CIOV0400 BMI DONE ;ERROR WHEN END OF FILE0410 CMP #0*}0420 BEQ LJ1 ;FOR MSB,LSB,REPEATED DATA0430 CMP #1280440 BEQ LJ2 ;FOR MSB,LSB,UNIQUE DATA0450 BCS +}G3 ;FOR <128 UNIQUE DATA0460 STA LSB ;0-1270470 JSR CIOV ;GET REPEATED DATA0480 STA DATA0490 ,}LDY YHOLD ;LAST Y VALUE0500 LDX XHOLD ;LAST ROW NUMBER, 0-1910510 GT1 LDA DATA0520 STA (SCN),Y0530 TYA 0-}540 CLC 0550 ADC #80 ;SKIP A ROW0560 BCC GT20570 INC SCN+10580 GT2 TAY 0590 INX ;COLUMN .}COUNT0600 CPX #96 ;TIME TO DO ODD ROWS IN COLUMN?0610 BNE J90620 INC COL ;2ND ROW ON SCREEN STARTS AS /}40th BYTE0630 LDY COL0640 GT7 LDA 880650 STA SCN0660 LDA 890670 STA SCN+10680 GT6 DEC LSB0690 BNE 0}GT1 ;KEEP FILLING SCREEN0700 G0 STY YHOLD ;DONE WITH THIS PASS0710 STX XHOLD0720 CLC 0730 BCC GT907401} J9 CPX #192 ;TIME TO START A NEW COLUMN?0750 BNE GT60760 SEC 0770 LDA COL ;NEW COLUMN0780 SBC #32}90790 TAY 0800 LDX #0 ;NEW COLUMN STARTS WITH X COUNT OF ZERO0810 BEQ GT70820 LJ1 BEQ G10830 LJ2 BEQ LJ3}30840 LJ9 BNE GT10850 LJ4 BEQ GT10860 DONE RTS 0870 G3 AND #127 ;CLEAR 7th BIT0880 STA LSB0890 G4 LDX CHAN0904}0 JSR CIOV ;GET UNIQUE DATA0910 LDX XHOLD ;ROW0920 LDY YHOLD0930 STA (SCN),Y ;PUT DATA TO SCREEN09405} TYA ;SET UP FOR NEXT SCREEN LOCATION0950 CLC 0960 ADC #80 ;SKIP A ROW0970 BCC G50980 INC6} SCN+10990 G5 TAY 1000 INX 1010 CPX #96 ;TIME TO DO ODD ROWS IN COLUMN?1020 BNE G61030 INC COL10407} LDY COL1050 G7 LDA 88 ;RESET SCREEN POSITION1060 STA SCN1070 LDA 891080 STA SCN+11090 G8 STY YHO8}LD1100 STX XHOLD1110 DEC LSB ;DONE YET?1120 BNE G4 :NO, KEEP FILLING SCREEN1130 BEQ G01140 G6 9}CPX #1921150 BNE G81160 SEC 1170 LDA COL ;SET UP FOR NEW COLUMN1180 SBC #391190 TAY 1200 LD:}X #01210 BEQ G71220 LJ6 BEQ G01230 LJ3 BEQ G21240 LJ5 BNE LJ91250 LJ7 BEQ G41260 LJ8 BNE G41270 G1 JSR CIOV ;G;}ET MSB1280 STA MSB1290 JSR CIOV ;GET LSB1300 STA LSB1310 JSR CIOV ;DATA TO BE REPEATED1320 STA<} DATA1330 LDA #01340 STA TEMP ;FULL PAGE COUNT1350 LDY YHOLD1360 LDX XHOLD ;COLUMN COUNT1370 LD=}A MSB ;ANY FULL PAGES?1380 BEQ LJ41390 GG3 LDA DATA ;DO FULL PAGES FIRST1400 STA (SCN),Y1410 TYA 1420>} CLC 1430 ADC #801440 BCC GG51450 INC SCN+11460 GG5 TAY 1470 INX ;ROW COUNT1480 CPX #96?}1490 BNE GG61500 INC COL1510 LDY COL ;NEW Y1520 GG7 LDA 881530 STA SCN1540 LDA 891550 STA @}SCN+1 ;RESET SCREEN1560 GG4 INC TEMP ;IF 0 THEN ONE PAGE HAS BEEN LOADED1570 BNE GG31580 DEC MSB ;IF 0 THA}EN DONE WITH FULL PAGES1590 BNE GG31600 LDA LSB1610 BEQ LJ6 ;IN CASE LSB WAS ZERO AFTER DOING FULL PAGES1B}620 BNE LJ51630 GG6 CPX #1921640 BNE GG41650 LDX #01660 SEC 1670 LDA COL1680 SBC #391690 TC}AY 1700 CLC 1710 BCC GG71720 GG2 LDA LSB1730 BEQ LJ61740 BNE LJ51750 LL6 BEQ LJ61760 LL8 BNE LJ81770 D}G2 JSR CIOV ;MSB1780 STA MSB1790 JSR CIOV ;LSB1800 STA LSB1810 LDA MSB1820 BEQ LJ71830 LE}DA #01840 STA TEMP1850 J1 LDX CHAN ;OPENED CHANNEL1860 JSR CIOV ;GET FIRST UNIQUE DATA1870 LDX XHOLD1F}880 LDY YHOLD1890 STA (SCN),Y ;DATA TO SCREEN1900 TYA 1910 CLC 1920 ADC #801930 BCC J31940 G}INC SCN+11950 J3 TAY ;SET UP FOR NEXT SCREEN POSITION1960 INX 1970 CPX #96 ;EVEN ROWS DONE?1980 H}BNE J6 ;NO1990 INC COL2000 LDY COL2010 J7 LDA 882020 STA SCN2030 LDA 892040 STA SCN+12050 J4I} STX XHOLD2060 STY YHOLD2070 INC TEMP ;IF 0 THEN ONE PAGE HAS BEEN LOADED2080 BNE J12090 DEC MSB2100J} BNE J12110 LDA LSB2120 BEQ LL62130 BNE LL82140 J6 CPX #1922150 BNE J42160 LDX #02170 SECK} 2180 LDA COL2190 SBC #392200 TAY 2210 LDX #02220 BEQ J7150 BNE J42160 LDX #02170 SECR10 ; SOURCE.051 LINES 20-5020 ;LENGTH OF A VERTICAL COMPRESS30 ;LENGTH IS STORED IN $CC AND $CD. RUN BEFORE SOURCEA.051.M}40 *= $380050 SCN = $CB60 COUNT = $D470 MSB = $CF80 HOLD = $D090 YHOLD = $D10100 LSB = $D6011N}0 XHOLD = $D70120 COL = $D80130 LENGTH = $CD0140 COL1 = $D90150 SCN1 = $E00160 PLA 0170 CLD 0180 LDA #O}390190 STA COL0200 LDA #00210 STA COUNT+10220 STA COUNT0230 STA LENGTH0240 STA LENGTH+10250 P} STA XHOLD0260 LDA 890270 STA SCN+10280 LDA 880290 STA SCN0300 STR LDX XHOLD ;MAX IS 1920310 LDYQ} #00320 STY LSB ;CURRENT COUNT0330 STY MSB0340 LDA (SCN),Y ;GET FIRST PICTURE DATA FOR NEXT LOOP0350 R}STA HOLD0360 GT3 INX 0370 CPX #96 ;COMPLETED FIRST OF EVEN NUMBER ROWS, NOW GO FOR ODD ROWS0380 BNE J90390 S} INC COL ;40-790400 LDY COL ;SET UP FOR ODD ROWS0410 BNE J70420 J9 CPX #192 ;ENTIRE COLUMN DONE0430 T} BNE J80440 LDX #00450 SEC ;GOTO NEXT COLUMN0460 LDA COL0470 SBC #390480 TAY ;1-3U}90490 J7 LDA 880500 STA SCN0510 LDA 890520 STA SCN+10530 BNE GT40540 LJ1 BCC STR0550 STA SCN+1 V};SET UP CORRECT SCREEN LOCATION0560 BNE GT40570 J8 TYA 0580 CLC 0590 ADC #80 ;EVERY OTHER ROW0600 BW}CC GT80610 INC SCN+10620 GT8 TAY 0630 GT4 INC LSB ;IMMEDIATE COUNTER0640 BNE GT20650 INC MSB0660 GT2 INX}C COUNT ;GRAND TOTAL0670 BNE G50680 INC COUNT+10690 LDA COUNT+10700 CMP #30 ;JUST IN CASE NO MORE PY}ICTURE DATA THEN GO DIRECTLY TO SAVE0710 BEQ GT70720 G5 LDA (SCN),Y0730 CMP HOLD0740 BEQ GT3 ;REPEATING Z}DATA0750 GT7 LDA LSB ;NO MORE REPEATS0760 CMP #1 ;NO REPEATS OR OVER 255 REPEATS0770 BNE GT60780 LDA[} MSB ;IF <>0 THEN 255+ REPEATS0790 BNE GT60800 LDA (SCN),Y0810 STA HOLD0820 CLC 0830 BCC NR6084\}0 GT0 BCC LJ10850 NR5 INC LSB0860 BNE J20870 INC MSB0880 J2 INC COUNT0890 BNE NR60900 INC COUNT+10910]} LDA COUNT+10920 CMP #30 ;END OF DATA0930 BEQ G70940 NR6 STX XHOLD0950 LDA COL0960 STA COL10970^} LDA SCN0980 STA SCN10990 LDA SCN+11000 STA SCN1+11010 STY YHOLD1020 INX 1030 CPX #961040 _} BNE JP11050 INC COL1060 LDY COL1070 BNE JP21080 JP1 CPX #1921090 BNE JP31100 LDX #01110 SE`}C 1120 LDA COL1130 SBC #391140 TAY 1150 JP2 LDA 881160 STA SCN1170 LDA 891180 STA SCN+11190 a} BNE JP41200 JP3 TYA 1210 CLC 1220 ADC #801230 BCC J41240 INC SCN+11250 J4 TAY 1260 JP4 LDA (SCN),Yb} ;NEXT BYTE OF DATA1270 CMP HOLD1280 G7 BEQ GT51290 STA HOLD1300 BNE NR51310 GT9 BCC GT01320 GT6 STY YHOLDc}1330 STX XHOLD1340 LDA LSB1350 CMP #1281360 BCS GH21370 LDA MSB1380 BNE GH21390 LDA LENGTHd}1400 CLC 1410 ADC #21420 STA LENGTH1430 BCC NR41440 BCS NR91450 GH2 LDA LENGTH1460 CLC 1470 e} ADC #41480 STA LENGTH1490 BCC NR41500 NR9 INC LENGTH+11510 NR4 LDA COUNT+11520 CMP #301530 BEQ DONEf}1540 LDA YHOLD1550 CLC 1560 ADC SCN1570 STA SCN ;FIX LO BYTE OF SCREEN ADDRESS. HI BYTE WAS FIXED IN g}PROGRAM1580 BCC GT91590 INC SCN+11600 CLC 1610 BCC GT91620 DONE RTS 1630 ;*** UNIQUE DATA ROUTINE ***1h}640 GT5 LDA SCN1+11650 STA SCN+11660 LDA SCN11670 STA SCN1680 LDA COL11690 STA COL1700 LDA LSBi}1710 CLC 1720 ADC LENGTH1730 STA LENGTH1740 LDA MSB1750 ADC LENGTH+11760 STA LENGTH+1 ;NO. OF UNj}IQUE DATA IS ADDED1770 LDA LSB1780 CMP #1281790 BCS GH5 ;128-2551800 LDA MSB1810 BNE GH5 ;>2k}551820 INC LENGTH ;FOR <128 CODE IS ONE BYTE1830 BNE NR41840 BEQ NR81850 GH5 LDA LENGTH1860 CLC 1870 l} ADC #3 ;CODE IS 3 BYTES1880 STA LENGTH1890 BCC NR41900 NR8 INC LENGTH+11910 BNE NR40 CLC 1870 l10 ; SOURCEA.051 LINES 70-8020 ;LENGTH HORIZONTAL COMPRESS30 ;$CD & $CE NOT USED SINCE THEY CONTAIN LENGTH OF THE VERTICA n}L COMPRESS40 *= $380050 SCN = $CF60 COUNT = $D770 MSB = $D180 HOLD = $D490 YHOLD = $D50100 TEMP o}= $D60110 LENGTH = $CB0120 PLA 0130 CLD 0140 LDA #00150 STA COUNT+10160 STA COUNT0170 STA LEN p}GTH0180 STA LENGTH+10190 LDA 890200 STA SCN+10210 LDA 880220 STA SCN0230 GT0 LDY #00240 STY MS q}B ;HI COUNT FOR THIS SAVE ONLY0250 LDA (SCN),Y ;FIRST BYTE OF THIS SAVE0260 STA HOLD0270 GT3 INY 0280 BNE r} GT1 ;IF 0 THEN INCREASE MSB0290 INC SCN+10300 INC MSB0310 GT1 INC COUNT0320 BNE GT20330 INC COUNT+1 s}0340 LDA COUNT+10350 CMP #300360 BEQ GT70370 GT2 LDA (SCN),Y ;BYTES 1,2,3...0380 CMP HOLD ;TO LAST BY t}TE0390 BEQ GT3 ;YES THEN REPEATING DATA0400 GT7 CPY #10410 BNE GT6 ;2 OR MORE REPEATS0420 LDA MSB u} ;CHECK IF NO REPEATS OR IF MSB<>0 THEN MANY REPEATS0430 BNE GT60440 LDA (SCN),Y ;GET IT BACK AGAIN0450 STA HO v}LD0460 CLC 0470 BCC NR60480 NR5 INC COUNT0490 BNE J10500 INC COUNT+10510 LDA COUNT+10520 CMP # w}300530 BEQ G70540 J1 CPY #00550 BNE NR60560 INC MSB0570 NR6 STY YHOLD0580 LDA SCN+10590 STA TEMP x}0600 INY 0610 BNE NR70620 INC SCN+10630 NR7 LDA (SCN),Y0640 CMP HOLD0650 G7 BEQ GT50660 STA HOLD0 y}670 BNE NR50680 GT9 BCC GT00690 GT6 STY YHOLD0700 CPY #1280710 BCS GH20720 LDA MSB0730 BNE GH20740 z} LDA LENGTH0750 CLC 0760 ADC #20770 STA LENGTH0780 BCC NR40790 BCS NR90800 GH2 LDA LENGTH0810 {} CLC 0820 ADC #40830 STA LENGTH0840 BCC NR40850 NR9 INC LENGTH+10860 NR4 LDA COUNT+10870 CMP #30088 |}0 BEQ DONE0890 LDA YHOLD0900 CLC 0910 ADC SCN0920 STA SCN ;FIX LO BYTE OF SCREEN ADDRESS. HI BYT }}E WAS FIXED IN PROGRAM0930 BCC GT90940 INC SCN+10950 CLC 0960 BCC GT90970 DONE RTS 0980 ;*** UNIQUE DAT ~}A ROUTINE ***0990 GT5 LDA TEMP1000 STA SCN+11010 LDY YHOLD1020 TYA 1030 CLC 1040 ADC LENGTH1050 } STA LENGTH1060 LDA MSB1070 ADC LENGTH+11080 STA LENGTH+1 ;NO. OF UNIQUE DATA IS ADDED1090 CPY #1281100 } BCS GH5 ;128-2551110 LDA MSB1120 BNE GH5 ;>2551130 INC LENGTH ;FOR <128 CODE IS ONE BYTE1140 } BNE NR41150 BEQ NR81160 GH5 LDA LENGTH1170 CLC 1180 ADC #3 ;CODE IS 3 BYTES1190 STA LENGTH1200 } BCC NR41210 NR8 INC LENGTH+11220 BNE NR40 CLC 1180 ADC #3 ;CODE IS 3 BYTES1190 STA LENGTH1200 210 ; SOURCEB.051 LINE 110-12020 ; COMPARES THE LENGTH OF BOTH A HORIZONTAL & VERTICAL COMPRESSION, CHOOSES THE SMALLER ONE} AND PLACES THE30 ;APPROPRIATE TOUCH TABLET HEADER TO DISK, 27 BYTES. THE TYPE OF COMPRESSION, 1 FOR VERTICAL AND 2 FOR40 }; HORIZONTAL, IS RETURNED IN THE RETURN VARIABLE.50 *= $060060 ICBAL = $034470 ICBAH = $034580 ICBLL = $0348}90 ICBLH = $03490100 ICCOM = $03420110 CIOV = $E4560120 HORLEN = $CB ;HORIZONTAL COMPRESSION LENGTH0130 VERLEN = $}CD ;VERTICAL LENGTH0140 CODE = $DB ;COMPRESSION TYPE0150 LENGTH = $CB0160 PLA 0170 CLD 0180 PLA 019}0 PLA ;OPENED CHANNEL 16,32...0200 TAX 0210 LDA HORLEN+10220 CMP VERLEN+10230 BEQ GT1 ;IF} = THEN NEED TO CHECK LO BYTE0240 BCS GT2 ;HORLEN > VERLEN0250 GT3 LDA #2 ;CODE FOR HORIZONTAL COMPRESSION FOR} TOUCH TABLET0260 BNE GT4 ;HORIZ LENGTH ALREADY IN LENGTH, OR $CB0270 GT1 LDA HORLEN0280 CMP VERLEN ;CHECK LO} BYTES0290 BCC GT3 ;HORIZONTAL IS LESS0300 GT2 LDA VERLEN+1 ;VERITCAL COMPRESSION IS SMALLER0310 STA LENGTH+1}0320 LDA VERLEN0330 STA LENGTH0340 LDA #1 ;CODE FOR VERTICAL COMPRESS0350 GT4 STA CODE0360 STA $CD } ;LATER FOR RETURN VARIABLE0370 LDA LENGTH0380 CLC 0390 ADC #26 ;LENGTH OF TOUCH TABLET FILE IS 26 MORE }THAN DATA LENGTH0400 STA LENGTH0410 BCC GT50420 INC LENGTH+10430 GT5 LDA #110440 STA ICCOM,X0450 LD}A #$D40460 STA ICBAL,X ;ADDRESS OF DATA TO PLACE TO DISK, LO BYTE0470 LDA #$FF ;START OF HEADER DATA, 4 BYTES TO} IDENTIFY PICTURE AS TOUCH TABLET COMPRESSION0480 STA $D4 ;WE WILL USE $D4 TO $E1 FOR DATA0490 LDA #$800500 } STA $D50510 LDA #$C90520 STA $D60530 LDA #$C70540 STA $D70550 LDA #$1A ;HEADER LENGTH -1 ,LO BY}TE THEN HIGH BYTE0560 STA $D80570 LDA #$000580 STA $D90590 STA ICBLH,X0600 STA ICBAH,X ;HI BYTE ADDR}ESS OF 40610 STA $DD ;LATER DATA0620 STA $DF0630 LDA #$01 ;REVISION NUMBER0640 STA $DA0650 LD}A #$0E ;GRAPHICS MODE E0660 STA $DC ;NOTE, $DB IS 'CODE'0670 LDA #$280680 STA $DE ;4 BYTES, $DD-$E0}, FOR SCREEN CONFIGURATION0690 LDA #$C00700 STA $E00710 LDA #130720 STA ICBLL,X ;LO LENGTH OF DATA TO PAS}S TO DISK0730 JSR CIOV PUT DATA TO DISK0740 LDY #00750 GT7 LDA 708,Y ;COLOR REGISTERS 708 TO 712 ARE NEXT076}0 STA $D4,Y0770 INY 0780 CPY #50790 BNE GT70800 LDA LENGTH ;LENGTH OF FILE LESS ONE IS NEXT0810 } STA $D90820 LDA LENGTH+10830 STA $DA0840 LDA #$00 ;NEXT 2 ARE SPARE BYTES0850 STA $DB0860 LDA #$}01 ;1 HERE MEANS COMPRESSED WITH THIS ROUTINE INSTEAD OF TOUCH TABLET; MAY BE USED BY USER0870 STA $DC0880 CLC }0890 ADC #$9A ;USE INSTEAD OF $9B, OR 155 WHICH IS EOL CHARACTER0900 STA $DD ;FIVE BYTES RESERVED FOR FUTERE }USE0910 STA $DE0920 STA $DF0930 STA $E00940 LDA #$A20950 STA $E10960 LDA #140970 STA ICBLL},X0980 JSR CIOV ;COMPLETE HEADER DATA TO DISK0990 LDA $CD1000 STA $D4 ;RETURN VARIABLE, LO BYTE1010 } LDA #$001020 STA $D5 ;HI BYTE1030 RTS 990 LDA $CD1000 STA $D4 ;RETURN VARIABLE, LO BYTE1010 710 ; SOURCEC.051 LINES 150-17020 ;TOUCH TABLET HORIZONTAL SAVE30 *= $380040 ICBAL = $034450 ICBAH = $03456}0 ICBLL = $034870 ICBLH = $034980 ICCOM = $034290 CIOV = $E4560100 SCN = $CB0110 HSCN = $D40120 FLAG = $D6}0130 COUNT = $CD0140 MSB = $CF0150 HOLD = $D00160 YHOLD = $D10170 HEADER = $D80180 TEMP = $D70190 PLA 0200 } CLD 0210 PLA 0220 PLA ;CHANNEL *160230 TAX 0240 LDA #110250 STA ICCOM,X ;COMMAND BYTE0260} LDA #00270 STA COUNT+10280 STA COUNT0290 LDA 890300 STA SCN+10310 STA HSCN+1 ;STARTING LOCATIO}N FOR NEXT LOOP0320 LDA 880330 STA SCN0340 STA HSCN0350 GT0 LDY #00360 STY MSB0370 LDA (SCN),Y ;GET} FIRST PICTURE DATA FOR NEXT LOOP0380 STA HOLD0390 GT3 INY 0400 BNE GT10410 INC SCN+10420 INC MSB0430 G}T1 INC COUNT0440 BNE GT20450 INC COUNT+10460 LDA COUNT+10470 CMP #300480 BEQ GT70490 GT2 LDA (SCN),}Y0500 CMP HOLD0510 BEQ GT30520 GT7 CPY #10530 BNE GT60540 LDA MSB0550 BNE GT60560 LDA (SCN),Y}0570 STA HOLD0580 CLC 0590 BCC NR60600 NR5 INC COUNT0610 BNE J10620 INC COUNT+10630 LDA COUNT+1}0640 CMP #300650 BEQ G70660 J1 CPY #00670 BNE NR60680 INC MSB0690 NR6 STY YHOLD0700 LDA SCN+1071}0 STA TEMP0720 INY 0730 BNE NR70740 INC SCN+10750 NR7 LDA (SCN),Y0760 CMP HOLD0770 G7 BEQ GT50780} STA HOLD0790 BNE NR50800 GT9 BNE GT00810 GT6 STY YHOLD0820 LDA #00830 STA ICBLH,X0840 STA FLAG085}0 LDA MSB0860 BNE G00870 TYA 0880 ASL A0890 BCS G00900 STY HEADER0910 LDA HOLD0920 STA} HEADER+10930 LDA #20940 STA ICBLL,X0950 CLC 0960 BCC G10970 G0 LDA #00980 STA HEADER0990 LDA} MSB1000 STA HEADER+11010 STY HEADER+21020 LDA HOLD1030 STA HEADER+31040 LDA #41050 STA ICBLL,X}1060 G1 LDA #HEADER/2561070 STA ICBAH,X1080 LDA #HEADER&2551090 STA ICBAL,X1100 NR4 JSR CIOV1110 LDA F}LAG1120 BNE NR11130 LDA COUNT+11140 CMP #301150 BEQ DONE1160 LDA YHOLD1170 CLC 1180 ADC SC}N1190 STA SCN1200 STA HSCN1210 LDA SCN+11220 ADC #01230 STA SCN+11240 STA HSCN+11250 BNE G}T91260 DONE RTS 1270 ;*** UNIQUE DATA ROUTINE ***1280 GT5 LDA #11290 STA FLAG1300 LDY YHOLD1310 LDA TEMP13}20 STA SCN+11330 LDA #01340 STA ICBLH,X1350 LDA MSB1360 BNE NR21370 TYA 1380 ASL A1390 } BCS NR21400 LDA #01410 STA ICBLL,X1420 TYA 1430 ORA #1281440 BNE NR41450 NR2 LDA #1281460 STA} HEADER1470 LDA MSB1480 STA HEADER+11490 LDA YHOLD1500 STA HEADER+21510 LDA #31520 STA ICBLL,X}1530 BNE G11540 NR1 DEC FLAG1550 LDA HSCN+11560 STA ICBAH,X1570 LDA HSCN1580 STA ICBAL,X1590 LD}A MSB1600 STA ICBLH,X1610 LDA YHOLD1620 STA ICBLL,X1630 CLC 1640 BCC NR4 STA ICBAL,X1590 LDb10 ; SOURCED.051 LINES 180-22020 ;TOUCH TABLET VERTICAL SAVE30 *= $380040 ICBAL = $034450 ICBAH = $03456}0 ICBLL = $034870 ICBLH = $034980 ICCOM = $034290 CIOV = $E4560100 SCN = $CB0110 HSCN = $D40120 FLAG = $DC}0130 COUNT = $CD0140 MSB = $CF0150 HOLD = $D00160 YHOLD = $D10170 HEADER = $E20180 LSB = $D60190 XHOLD = $D70200} CHAN = $D80210 COL = $D90220 COLH = $DA0230 NEWX = $DB0240 COL1 = $E00250 SCN1 = $E10260 PLA 0270 CLD }0280 PLA 0290 PLA ;CHANNEL *160300 STA CHAN0310 TAX 0320 LDA #110330 STA ICCOM,X ;COMMA}ND BYTE0340 LDA #390350 STA COL0360 STA COLH0370 LDA #00380 STA COUNT+10390 STA COUNT0400 }STA XHOLD0410 LDA 890420 STA SCN+10430 STA HSCN+1 ;STARTING LOCATION FOR NEXT LOOP0440 LDA 880450 S}TA SCN0460 STA HSCN0470 STR LDX XHOLD ;MAX IS 1920480 LDY #00490 STY LSB ;CURRENT COUNT0500 STY MS}B0510 LDA (SCN),Y ;GET FIRST PICTURE DATA FOR NEXT LOOP0520 STA HOLD0530 GT3 INX 0540 CPX #96 ;COMPLETED }FIRST OF EVEN NUMBER ROWS, NOW GO FOR ODD ROWS0550 BNE J90560 INC COL ;40-790570 LDY COL ;SET UP FOR O}DD ROWS0580 BNE J70590 J9 CPX #192 ;ENTIRE COLUMN DONE0600 BNE J80610 LDX #00620 SEC ;GOTO N}EXT COLUMN0630 LDA COL0640 SBC #390650 TAY ;1-390660 J7 LDA 880670 STA SCN0680 LDA 890690} STA SCN+10700 BNE GT40710 LJ1 BCC STR0720 STA SCN+1 ;SET UP CORRECT SCREEN LOCATION0730 BNE GT40740 J}8 TYA 0750 CLC 0760 ADC #80 ;EVERY OTHER ROW0770 BCC GT80780 INC SCN+10790 GT8 TAY 0800 GT4 INC LS}B ;IMMEDIATE COUNTER0810 BNE GT20820 INC MSB0830 GT2 INC COUNT ;GRAND TOTAL0840 BNE G50850 INC COU}NT+10860 LDA COUNT+10870 CMP #30 ;JUST IN CASE NO MORE PICTURE DATA THEN GO DIRECTLY TO SAVE0880 BEQ GT70}890 G5 LDA (SCN),Y0900 CMP HOLD0910 BEQ GT3 ;REPEATING DATA0920 GT7 LDA LSB ;NO MORE REPEATS0930 CMP} #1 ;NO REPEATS OR OVER 255 REPEATS0940 BNE GT60950 LDA MSB ;IF <>0 THEN 255+ REPEATS0960 BNE GT6097}0 LDA (SCN),Y0980 STA HOLD0990 CLC 1000 BCC NR61010 GT0 BCC LJ11020 NR5 INC LSB1030 BNE J21040 } INC MSB1050 J2 INC COUNT1060 BNE NR61070 INC COUNT+11080 LDA COUNT+11090 CMP #30 ;END OF DATA1100} BEQ G71110 NR6 STX NEWX1120 LDA COL1130 STA COL11140 LDA SCN1150 STA SCN11160 LDA SCN+11170 } STA SCN1+11180 STY YHOLD1190 INX 1200 CPX #961210 BNE JP11220 INC COL1230 LDY COL1240 B}NE JP21250 JP1 CPX #1921260 BNE JP31270 LDX #01280 SEC 1290 LDA COL1300 SBC #391310 TAY 1320 }JP2 LDA 881330 STA SCN1340 LDA 891350 STA SCN+11360 BNE JP41370 JP3 TYA 1380 CLC 1390 ADC #80}1400 BCC J41410 INC SCN+11420 J4 TAY 1430 JP4 LDA (SCN),Y ;NEXT BYTE OF DATA1440 CMP HOLD1450 G7 BEQ LJ21}460 STA HOLD1470 BNE NR51480 GT9 BCC GT01490 GT6 CLC ;REPEATING DATA SAVE1500 STY YHOLD1510 STX }NEWX1520 LDX CHAN ;OPENED CHANNEL1530 LDA #01540 STA ICBLH,X1550 STA FLAG ;=0 FOR REPEATING DATA15}60 LDA MSB1570 BNE G0 ;NEED 4 BYTE HEADER1580 LDA LSB1590 ASL A1600 BCS G0 ;128 TO 255 REPE}ATING DATA1610 LDA LSB1620 STA HEADER1630 LDA HOLD ;THE PICTURE DATA1640 STA HEADER+11650 LDA #2}1660 STA ICBLL,X ;CODE FOR 2 BYTE HEADER1670 CLC 1680 BCC G11690 LJ2 BEQ GT51700 G0 LDA #01710 STA HEAD}ER ;0 IS KEY FOR 4 BYTE HEADER1720 LDA MSB1730 STA HEADER+1 ;MSB1740 LDA LSB1750 STA HEADER+2 ;LSB1760 } LDA HOLD ;REPEATED DATA1770 STA HEADER+31780 LDA #41790 STA ICBLL,X ;LENGTH OF SAVE1800 G1 LDA #HEADE}R/256 ;HI OF REPEAT ADDRESS1810 STA ICBAH,X1820 LDA #HEADER&255 ;LO OF REPEAT ADDRESS1830 STA ICBAL,X1840 NR4} JSR CIOV ;PUT TO DISK1850 LDA FLAG1860 BNE NR1 ;UNIQUE DATA1870 NR7 LDA COUNT+11880 CMP #301890 }BEQ DONE1900 LDA YHOLD ;LAST Y VALUE1910 CLC 1920 ADC SCN1930 STA SCN1940 STA HSCN1950 BCC J6}1960 INC SCN+11970 J6 LDA SCN+11980 STA HSCN+11990 LDA COL2000 STA COLH2010 LDA NEWX2020 STA }XHOLD2030 CLC 2040 BCC GT92050 DONE RTS 2060 ;** UNIQUE DATA ROUTINE **2070 GT5 LDA COL12080 STA COL2090 } LDA SCN12100 STA SCN2110 LDA SCN1+12120 STA SCN+12130 LDA #12140 STA FLAG2150 LDX CHAN2160 } LDA #02170 STA ICBLH,X2180 LDA MSB2190 BNE NR22200 LDA LSB2210 ASL A2220 BCS NR2 ;128-2}55 BYTES2230 LDA #02240 STA ICBLL,X2250 LDA LSB2260 ORA #128 ;SET 8 BIT2270 BNE NR42280 NR2 LDA }#128 ;>127 UNIQUE DATA2290 STA HEADER2300 LDA MSB2310 STA HEADER+12320 LDA LSB2330 STA HEADER+22}340 LDA #32350 STA ICBLL,X2360 BNE G12370 NR1 LDA #02380 STA ICBLL,X ;SPECIAL CASE2390 TAY 2400 } LDA (HSCN),Y ;GET UNIQUE DATA2410 JSR CIOV2420 DEC LSB2430 BNE JJ62440 LDA MSB2450 BEQ NR72460 } DEC MSB2470 JJ6 INC XHOLD ;X AT START2480 LDY XHOLD2490 CPY #962500 BNE JJ12510 INC COLH ;AT START}2520 LDA COLH2530 STA HSCN2540 BNE JJ72550 JJ1 CPY #1922560 BNE JJ32570 LDY #02580 STY XHOLD } ;BACK TO 0 AGAIN, NEW ROW2590 SEC 2600 LDA COLH2610 SBC #392620 STA HSCN2630 JJ7 LDA 882640 CLC 2}650 ADC HSCN2660 STA HSCN2670 LDA 892680 ADC #02690 STA HSCN+12700 BNE NR12710 JJ3 CLC 2720 } LDA HSCN2730 ADC #802740 STA HSCN2750 BCC NR12760 INC HSCN+12770 BNE NR12780 RTS LC 2720 r10 ; SOURCE.052 LINE 12020 ;SCROLL PICTURE UP30 *= $060040 PLA 50 LDA #12960 STA $CC ;HI O}F BEGINNING SCREEN MEMORY70 LDA #15980 STA $CE ;30 PAGES UP IS SOME MEMORY ON TOP OF GR.8 SCREEN TO PLACE }FIRST LINE OF SCREEN ONLY90 LDA #800100 STA $CB ;LO OF SCREEN MEMORY0110 STA $CD ;LO OF DESTINATION}0120 LDY #00130 LOOP LDA ($CB),Y ;GET FIRST BYTE0140 STA ($CD),Y ;STORE ON TOP OF GR.8 SCREEN0150 INY 0160 } CPY #400170 BNE LOOP0180 ;NOW FIRST LINE OF SCREEN HAS BEEN STORED ON TOP OF LAST LINE OF SCREEN0190 LDA $CC020}0 STA $CE ;RESTORE HI OF DESTINATION. NOW DESTINATION IS FIRST LINE OF SCREEN0210 LDA #1200220 STA $CB } ;NEXT LINE OF SOURCE IS SECOND LINE, 40 BYTES UP IN MEMORY0230 LDX #0 ;LINE COUNT...192 LINES TO BE TRANSFERED024}0 LDY #00250 LOOP2 LDA ($CB),Y0260 STA ($CD),Y ;2ND LINE TO FIRST AND SO ON0270 INY 0280 CPY #00290 }BNE LOOP20300 INX 0310 CPX #30 ;30 PAGES FOR ALL SCREEN0320 BEQ DONE0330 INC $CC0340 INC $CE035}0 CLC 0360 BCC LOOP20370 DONE RTS ;30 PAGES FOR ALL SCREEN0320 BEQ DONE0330 INC $CC0340 INC $CE035-10 ; SOURCEA.052 LINE 13020 ;SCROLL DOWN30 *= $060040 PLA 50 LDA #158 ;HI BYTE OF LAST SCREEN MEM }ORY60 STA $CC70 STA $CE80 LDA #80 ;LAST POSITION +190 STA $CB ;SOURCE0100 LDA #120 } ;+40 BYTES TO STORE THE PREVIOUS 40 BYTES. THIS IS ABOVE SCREEN MEMORY0110 STA $CD ;DESTINATION0120 LDX #30 } ;30 PAGES TO DO0130 LDY #2550140 LOOP LDA ($CB),Y ;TRANSFER BYTES0150 STA ($CD),Y0160 DEY 0170 CPY # }2550180 BNE LOOP0190 DEX ;PAGES0200 CPX #00210 BEQ OUT0220 DEC $CC ;ONE LESS HI BYTE023 }0 DEC $CE0240 CLC 0250 BCC LOOP0260 OUT LDA #158 ;ALL 7680 HAVE BEEN MOVED UP 40 BYTES SO NOW TRANSFER THE }40 BYTES IN ABOVE MEMORY TO FIRST LINE0270 STA $CC0280 LDA #128 ;HI BYTE DESTINATION0290 STA $CE0300 L }DA #1200310 STA $CB0320 STA $CD0330 LDY #2550340 LOOP2 LDA ($CB),Y ;SOURCE0350 STA ($CD),Y ;DESTINATION }0360 DEY 0370 CPY #214 ;40 BYTES TO PASS0380 BNE LOOP20390 RTS URCE0350 STA ($CD),Y ;DESTINATION V10 ; SOURCEB.052 LINE 14020 ;COARSE SCROLL TO RIGHT30 *= $060040 PLA 50 LDA #15860 STA $CC $} ;HI OF LAST SCREEN POSITION LESS ONE PAGE70 STA $CE80 LDA #8090 STA $CB ;SOURCE +ONE BYTE0100 $} LDA #81 ;STORE FIRST DESTINATION IN POSITION JUST ONE ABOVE SCREEN TOP MEMORY0110 STA $CD0120 LDX #300130 $} LDY #2550140 LOOP LDA ($CB),Y ;START FROM LAST POSITION0150 STA ($CD),Y ;AND STORE ONE BYTE ABOVE THIS0160 DEY $}0170 CPY #2550180 BNE LOOP0190 DEC $CC0200 DEC $CE0210 DEX ;ONE PAGE COMPLETED0220 CPX #$}00230 BNE LOOP0240 LDA #1290250 STA $CC0260 STA $CE ;NEED TO SHIFT FIRST COLUMN UP ONE LINE TO COMPLE%}TE PICTURE0270 LDA #1200280 STA $CB ;SECOND SCREEN POSITION IN FIRST COLUMN,SOURCE0290 LDA #800300 ST%}A $CD ;FIRST POSITION NOW EMPTY FOR DESTINATION0310 LDY #00320 STY $CF0330 LOOP1 LDA ($CB),Y0340 STA ($CD%}),Y TRANSFER BYTES DOWN COLUMN0350 LDX #00360 LOOP2 INX 0370 INY 0380 CPY #00390 BEQ FIXHI0400 BCK CPX %}#40 ;MINI LOOP TO BYPASS 40 BYTES SO AS TO ONLY TRANSFER THE COLUMN BYTES0410 BNE LOOP20420 INC $CF0430 LD%}A $CF0440 CMP #192 ;192 ROWS IN A COLUMN0450 BNE LOOP10460 RTS 0470 FIXHI INC $CC0480 INC $CE0490 %} CLC 0500 BCC BCK ;192 ROWS IN A COLUMN0450 BNE LOOP10460 RTS 0470 FIXHI INC $CC0480 INC $CE0490 $10 ; SOURCEC.052 LINE 15020 ;SCROLL PICTURE TO LEFT. FIRST SHIFT COLUMN 0 UP ONE LEVEL IN MEMORY THEN MOVE ALL BYTES DOWN)} ONE IN MEMORY.30 *= $060040 PLA 50 LDA #15960 STA $CC ;HI SOURCE70 STA $CE ;HI D)}ESTINATION80 LDA #090 STA $CF ;ROW COUNT0100 STA $CB ;LOWER LEFT POSIT0110 LDA #400120 S) }TA $CD ;ONE POSITION ON SCREEN WITH Y OFFSET OF 400130 ;MOVE LEFT COLUMN UP IN MEMORY0140 LDY #400150 LOOP LDA ($C) }B),Y0160 STA ($CD),Y0170 LDX #00180 LOOP2 INX 0190 DEY 0200 CPY #2550210 BEQ FIXHI0220 BCK CPX #40) }0230 BNE LOOP20240 INC $CF0250 LDA $CF0260 CMP #1920270 BNE LOOP0280 ;NOW SHIFT ALL POSITIONS DOWN ) }ONE IN MEMORY0290 LDA #1290300 STA $CC0310 STA $CE ;HI OF FIRST TWO SCREEN POSITIONS0320 LDA #810330) } STA $CB ;LO OF FIRST SOURCE0340 LDA #800350 STA $CD ;LO OF FIRST DESTINATION LEFT BLANK BY COLUMN SHIF)}T ABOVE0360 LDY #00370 LDX #00380 LOOP3 LDA ($CB),Y0390 STA ($CD),Y0400 INY 0410 CPY #00420 BN)}E LOOP30430 INC $CC0440 INC $CE0450 INX 0460 CPX #300470 BNE LOOP30480 RTS 0490 FIXHI DEC $CC)}0500 DEC $CE0510 CLC 0520 BCC BCK INX 0460 CPX #300470 BNE LOOP30480 RTS 0490 FIXHI DEC $CC(010 ; SOURCED.052 LINE 18020 ;FINE SCROLLING TO RIGHT30 *= $060040 PLA 50 LDA #12860 STA $CC7-}0 LDA #12080 STA $CB90 LDX #0 ;PAGE COUNT0100 CLC 0110 LOOP LDY #2550120 LDA ($CB),Y0130-} ROR A ;TAKE BYTE ON LEFT SIDE AND PUT RIGHT MOST BIT INTO CARRY FOR TRANSFER TO LEFY SIDE BYTE0140 LDY #2160-}150 LOOP2 LDA ($CB),Y0160 ROR A0170 STA ($CB),Y ;TAKE RIGHTMOST BYTE ROL BITS BRINGING IN CARRY BIT THEN RESTORE01-}80 INY 0190 BMI LOOP20200 INX ;A PAGE DONE0210 CPX #1920220 BEQ DONE0230 LDA $CB ;NO-}T DONE THEN SET UP FOR NEXT ROW0240 CLC 0250 ADC #400260 STA $CB0270 BCS FIXHI0280 BCK CLC 0290 BCC-} LOOP0300 FIXHI INC $CC0310 BCS BCK0320 DONE RTS C #400260 STA $CB0270 BCS FIXHI0280 BCK CLC 0290 BCC,910 ; SOURCEE.052 LINE 19020 ;FINE SCROLLING TO LEFT30 *= $060040 PLA 50 LDA #12960 STA $CC701} LDA #8080 STA $CB90 LDX #0 ;PAGE COUNT0100 CLC 0110 LOOP LDY #00120 LDA ($CB),Y0130 1} ROL A ;TAKE BYTE ON RIGHT SIDE AND PUT LEFT MOST BIT INTO CARRY FOR TRASNFER TO RIGHT SIDE BYTE0140 LDY #390150 1}LOOP2 LDA ($CB),Y0160 ROL A0170 STA ($CB),Y ;TAKE RIGHTMOST BYTE ROL BITS BRINGING IN CARRY BIT THEN RESTORE0180 1} DEY 0190 BPL LOOP20200 INX ;A PAGE DONE0210 CPX #300220 BEQ DONE0230 LDA $CB ;NOT DON1}E THEN SET UP FOR NEXT ROW0240 CLC 0250 ADC #400260 STA $CB0270 BCS FIXHI0280 BCK CLC 0290 BCC LOOP1}0300 FIXHI INC $CC0310 BCS BCK0320 DONE RTS C #400260 STA $CB0270 BCS FIXHI0280 BCK CLC 0290 BCC LOOP0410 ; SOURCE.05320 ; MAKES INVERSE OF PRESENT SCREEN30 *= $060040 SCN = $CB50 PLA 60 CLD 70 5 } LDA 8880 STA SCN90 LDA 890100 STA SCN+10110 LDY #00120 LDX #300130 GT1 LDA (SCN),Y0140 EO5!}R #2550150 STA (SCN),Y0160 INY 0170 BNE GT10180 DEX 0190 BEQ DONE0200 INC SCN+10210 BNE GT5"}10220 DONE RTS TA (SCN),Y0160 INY 0170 BNE GT10180 DEX 0190 BEQ DONE0200 INC SCN+10210 BNE GT410 ; SOURCE.054 LINES 90-10020 ; EPSON/GEMINI PRINT ROUTINE30 *= $060040 SCN = $CB50 SCNH = $D460 STG 9$} = $CD70 YHOLD = $CF80 INVERSE = $D090 COUNT = $D10100 FLAG = $D60110 ICCOM = $03420120 ICBAL = $03440130 ICBAH9%} = $03450140 ICBLL = $03480150 ICBLH = $03490160 CIOV = $E4560170 PLA 0180 PLA 0190 PLA 0200 ASL A029&}10 ASL A0220 ASL A0230 ASL A0240 TAX ;CHANNEL0250 LDA #90260 STA ICCOM,X ;COMMAND BYTE09'}270 PLA 0280 PLA 0290 STA INVERSE ;0=NORMAL, 255=INVERSE PRINT0300 PLA 0310 STA ICBAH,X ;ADDRESS TO B9(}EGIN PRINT0320 STA STG+10330 PLA 0340 STA ICBAL,X0350 STA STG0360 LDY #00370 STY FLAG ;USED 9)}TO INDICATE CHARACTER 13 WAS PRINTED0380 LDA #27 ;ESCAPE CHARACTER0390 STA (STG),Y0400 INY 0410 LDA #9*}75 ;'K'0420 STA (STG),Y0430 INY 0440 LDA #192 ;LO BYTE TO PASS, 1920450 STA (STG),Y0460 INY 9+}0470 LDA #0 ;'HEART'0480 STA (STG),Y0490 PLA 0500 STA SCN+10510 PLA 0520 CLC 0530 ADC 9,}#2160540 STA SCN0550 STA SCNH0560 LDA SCN+10570 ADC #29 ;GET TO LOWER LEFT SCREEN POSITION0580 S9-}TA SCN+10590 STA SCNH+1 ;HOLD POSITION0600 LDA #1960610 STA ICBLL,X ;LENGTH TO PRINT, 192, PLUS 4 FOR HEADER 9.}FOR DOT IMAGE GRAPHICS,'ESCAPE K LO BYTE, HI BYTE0620 LDA #00630 STA ICBLH,X0640 STA COUNT0650 GT5 LDA #40669/}0 STA YHOLD ;START FILLING STRING 4 SPACES AFTER START OF HEADER0670 GT2 LDY COUNT0680 LDA (SCN),Y0690 EOR I90}NVERSE0700 CMP #155 ;EOL CHARACTER, CAN NOT PRINT0710 BNE GT60720 LDA #153 ;USE 153 FOR ANY 155'S0722 91} BNE H10730 GT6 CMP #13 ;CAN NOT PRINT 2 OF THESE IN A ROW0740 BNE H1 ;CONTINUE AS NORMAL0750 LDY FLAG92}0760 BNE H3 ;IF 1 THEN SECOND TIME SO CHANGE THIS 13 TO 110770 LDY #1 ;FIRST TIME SO SET FLAG TO 10780 :}10 ; SOURCE.055 LINE 90-10020 ; NEC/C.ITOH PRINT ROUTINE30 *= $060040 SCN = $CB50 SCNH = $D460 STG = =4} $CD70 YHOLD = $CF80 INVERSE = $D090 COUNT = $D10100 FLAG = $D60110 ICCOM = $03420120 ICBAL = $03440130 ICBAH = $=5}03450140 ICBLL = $03480150 ICBLH = $03490160 CIOV = $E4560170 PLA 0180 PLA 0190 PLA 0200 ASL A0210 =6} ASL A0220 ASL A0230 ASL A0240 TAX ;CHANNEL0250 LDA #90260 STA ICCOM,X ;COMMAND BYTE0270 =7} LDA #390280 STA COUNT0290 PLA 0300 PLA 0310 STA INVERSE ;0=NORMAL, 255=INVERSE PRINT0320 PLA 03=8}30 STA ICBAH,X ;ADDRESS TO BEGIN PRINT0340 STA STG+10350 PLA 0360 STA ICBAL,X0370 STA STG0380 LD=9}Y #00390 STY FLAG0400 LDA #27 ;ESCAPE CHAR.0410 STA (STG),Y0420 INY 0430 LDA #83 ;'S'0440 =:} STA (STG),Y0450 INY 0460 LDA #48 ;'0'0470 STA (STG),Y0480 INY 0490 LDA #49 ;'1'0500 =;}STA (STG),Y0510 INY 0520 LDA #57 ;'9'0530 STA (STG),Y0540 INY 0550 LDA #50 '2'0560 STA =<}(STG),Y ;CODES FOR NEC DOT IMAGE MODE PRINTING0570 PLA 0580 STA SCN+10590 STA SCNH+10600 PLA 0610 ST==}A SCN0620 STA SCNH ;HOLD POSITION0630 LDA #1980640 STA ICBLL,X ;LENGTH TO PRINT, 192, PLUS 6 FOR HEADER FOR=>} DOT IMAGE GRAPHICS,'ESCAPE S0192'0650 LDA #00660 STA ICBLH,X0670 GT5 LDA #60680 STA YHOLD ;START FILLING S=?}TRING 6 SPACES AFTER START OF HEADER0690 GT2 LDY COUNT0700 LDA (SCN),Y0710 EOR INVERSE0720 CMP #155 ;EOL, =@}CAN NOT PRINT0730 BNE GT60740 LDA #153 ;USE 153 FOR ANY 155'S0750 BNE H10760 GT6 CMP #13 ;CAN NOT PRIN=A}T 2 OF THESE IN A ROW0770 BNE H1 ;CONTINUE AS NORMAL0780 LDY FLAG0790 BNE H30800 LDY #10810 BNE=B} H40820 LDY #00830 H3 LDA #110840 H1 LDY #0 ;RESET EVERY TIME NOT A 130850 H4 STY FLAG0860 LDY YHOLD087=C}0 STA (STG),Y0880 LDA SCN0890 CLC 0900 ADC #400910 STA SCN ;NEXT SCREEN POSITION0920 BCC GT4=D}0930 INC SCN+10940 GT4 INY 0950 STY YHOLD0960 CPY #198 ;192+60970 BNE GT2 ;GO GET NEXT SCREEN POS>}10 ; SOURCE.056 LINE 11020 ; MAKES AN INVERSE PICTURE.30 *= $060040 SCN = $CB50 PLA 60 CLD 70 AF} LDA 8880 STA SCN90 LDA 890100 STA SCN+10110 LDY #00120 LDX #300130 GT1 LDA (SCN),Y0140 AG} EOR #255 ;CHANGE 0'S TO 1'S AND VICE VERSA.0150 STA (SCN),Y0160 INY 0170 BNE GT10180 DEX 0190 AH}BEQ DONE0200 INC SCN+10210 BNE GT10220 DONE RTS TA (SCN),Y0160 INY 0170 BNE GT10180 DEX 0190 @<10 ; SOURCE.05720 ;DLI FOR BACKGROUND COLOR CHANGE IN GR.0. TWO COLORS.30 *= $060040 VDSLST = 51250 SDLSTL = 56EJ}060 TEMP = $CB70 COLOR = $CD80 PLA 90 LDA SDLSTL+10100 STA TEMP+10110 LDA SDLSTL0120 STA EK}TEMP ;PUT DISPLAY LIST IN PAGE ZERO FOR ADDRESSING0130 PLA 0140 STA VDSLST+10150 PLA 0160 CLC 0170 EL} ADC #50 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 50 MORE THAN BEGINNING0180 STA VDSLST0190 BCC GT10200 INEM}C VDSLST+10210 GT1 PLA 0220 PLA ;LOCATION OFFSET FROM DISPLAY LIST TO CHANGE COLOR ON NEXT LINE. ONLY 3, AND 6EN}-28 ARE POSSIBLE GR.00230 CMP #10240 BNE GT50250 LDA #2550260 GT5 CLC 0270 ADC #40280 TAY 0290 EO} LDA #1280300 ORA (TEMP),Y0310 STA (TEMP),Y0320 PLA 0330 PLA ;COLOR0340 STA COLOR0350 REP}TS 0360 ;*** DLI ROUTINE ***0370 COLBCK = $D0180380 WSYNC = $D40A0390 PHA ;SAVE ACCUM0400 LDA COLOR0410EQ} STA WSYNC0420 STA COLBCK0430 PLA 0440 RTI $D40A0390 PHA ;SAVE ACCUM0400 LDA COLOR0410D?10 ; SOURCE.05820 ;DLI FOR BACKGROUND COLOR CHANGE IN GR.0. THREE COLORS.30 *= $060040 VDSLST = 51250 SDLSTL = IS}56060 TEMP = $CB70 COLOR1 = $CD80 COLOR2 = $CE90 CONTROL = $D00100 PLA 0110 LDA SDLSTL+10120 STA TEMPIT}+10130 LDA SDLSTL0140 STA TEMP0150 PLA 0160 STA VDSLST+10170 PLA 0180 CLC 0190 ADC #76 IU} ;STRING ADDRESS OF DLI ROUTINE BELOW IS 76 MORE THAN BEGINNING0200 STA VDSLST0210 BCC GT10220 INC VDSLST+102IV}30 GT1 PLA 0240 PLA ;LOCATION OFFSET FROM DISPLAY LIST TO CHANGE COLOR ON NEXT LINE. ONLY 3, AND 6-28 ARE POSSIIW}BLE GR.00250 CMP #10260 BNE GT50270 LDA #2550280 GT5 CLC 0290 ADC #40300 TAY 0310 LDA #128032IX}0 ORA (TEMP),Y0330 STA (TEMP),Y0340 PLA 0350 PLA ;LOCATION OFFSET FROM DISPLAY LIST TO CHANGE COLOIY}R SECOND TIME. ONLY 3, AND 6-28 ARE POSSIBLE0360 CMP #10370 BNE GT70380 LDA #2550390 GT7 CLC 0400 ADC #IZ}40410 TAY 0420 LDA #1280430 ORA (TEMP),Y0440 STA (TEMP),Y0450 PLA 0460 PLA ;COLOR0470 I[} STA COLOR10480 PLA 0490 PLA 0500 STA COLOR20510 LDA #00520 STA CONTROL ;FIRST TIME IS ZERO0530 I\} RTS 0540 ;*** DLI ROUTINE ***0550 COLBCK = $D0180560 WSYNC = $D40A0570 PHA ;SAVE ACCUM0580 LDA CONTRI]}OL ;SWITCHES BETWEEN ONE AND ZERO:START AT ZERO0590 BNE GT20600 LDA COLOR10610 INC CONTROL0620 BNE GT306I^}30 GT2 LDA COLOR20640 DEC CONTROL0650 GT3 STA WSYNC0660 STA COLBCK0670 PLA 0680 RTI 0620 BNE GT306Hj10 ; SOURCE.05920 ;DLI FOR BACKGROUND COLOR CHANGE IN GR.0. FOUR COLORS.30 *= $060040 VDSLST = 51250 SDLSTL = 5M`}6060 TEMP = $CB70 COLOR1 = $CD80 COLOR2 = $CE90 COLOR3 = $CF0100 CONTROL = $D00110 PLA 0120 LDA SDLSTL+1Ma}0130 STA TEMP+10140 LDA SDLSTL0150 STA TEMP0160 LDX #30170 PLA 0180 STA VDSLST+10190 PLA Mb}0200 CLC 0210 ADC #67 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 67 MORE THAN BEGINNING0220 STA VDSLST0230 Mc} BCC GT10240 INC VDSLST+10250 GT1 PLA 0260 PLA ;LOCATION OFFSET FROM DISPLAY LIST TO CHANGE COLOR ON NEXTMd} LINE. ONLY 3, AND 6-28 ARE POSSIBLE GR.00270 CMP #10280 BNE GT50290 LDA #2550300 GT5 CLC 0310 ADC #40Me}320 TAY 0330 LDA #1280340 ORA (TEMP),Y0350 STA (TEMP),Y0360 DEX 0370 BNE GT10380 PLA 0390 Mf} PLA ;COLOR0400 STA COLOR10410 PLA 0420 PLA 0430 STA COLOR20440 PLA 0450 PLA 0460 Mg} STA COLOR30470 LDA #10480 STA CONTROL ;FIRST TIME IS ONE0490 RTS 0500 ;*** DLI ROUTINE ***0510 COLBCK = $Mq}BSOURCE 050B)#SOURCEA 050B!LSOURCE 051BmSOURCEA 051BSOURCEB 051BSOURCEC 051B0SOURCED 051B SOURCE 052B SOURCEA 052B SOURCEB 052B SOURCEC 052BSOURCED 052BSOURCEE 052BSOURCE 053B#SOURCE 054B3SOURCE 055BESOURCE 056B ISOURCE 057B RSOURCE 058B _SOURCE 059B uSOURCE 060B SOURCE 061B SOURCE 062B SOURCE 063B SOURCE 064B SOURCE 065B SOURCE 066B SOURCE 067BSOURCE 068B SOURCE 069BSOURCE 070BSOURCEA 070BSOURCEB 070BSOURCE 071BSOURCEA 071B SOURCE 072B SOURCEA 072B SOURCE 073B&SOURCE 074B4SOURCE 075BCSOURCE 076BQSOURCE 077BbSOURCE 079BhSOURCEA 079BnSOURCE 080BuSOURCEA 080B|SOURCE 081BSOURCEA 081BSOURCE 082B SOURCE 083B SOURCEA 083BSOURCE 084BSOURCEA 084SOURCEB 084B SOURCE 044B%DOS SYSB*DUP SYSSOURCE 047/SOURCE 048@FSOURCE 049'DOS SYSCDUP SYSD0180520 WSYNC = $D40A0530 PHA ;SAVE ACCUM0540 LDA CONTROL ;STARTS AS ONE, THEN 2 THEN ZERO0550 CMP #Mr}10560 BEQ GT4 ;CONTROL = 10570 BCS GT2 ;CONTROL = 20580 LDA COLOR3 ;CONTROL =00590 INC CONTROL ;Ms}TO 10600 BNE GT30610 GT2 LDA COLOR20620 DEC CONTROL0630 DEC CONTROL ;TO ZERO0640 BEQ GT30650 GT4 LDA COMt}LOR10660 INC CONTROL ;TO 20670 GT3 STA WSYNC0680 STA COLBCK0690 PLA 0700 RTI BEQ GT30650 GT4 LDA COLc10 ; SOURCE.06020 ;DLI FOR BACKGROUND COLOR CHANGE FOR GR0 SCREEN, ANY # LINES AND ANY COLORS.30 *= $060040 VDSLST Qv}= 51250 SDLSTL = 56060 TEMP = $CB70 NOLINE = 153680 LINES = 153890 XCOUNT = 15370100 PLA 0110 LDA SDLQw}STL+10120 STA TEMP+10130 LDA SDLSTL0140 STA TEMP ;DISPLAY LIST0150 PLA 0160 STA VDSLST+10170 Qx} PLA 0180 CLC 0190 ADC #63 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 63 MORE THAN BEGINNING0200 STA VDSLST Qy};ADDRESS OF DLI0210 BCC GT20220 INC VDSLST+10230 GT2 PLA 0240 PLA 0250 STA NOLINE ;LO OF NUMBER OF LINEQz}S TO CHANGE IN 15360260 LDX #00270 STX XCOUNT ;LATER FOR DLI0280 GT1 LDA LINES,X ;STARTING AT 1538 GET LINES TO CQ{}HANGE0290 ;LINE NUMBER TO BEGIN DLI. LINE 1=3, LINES 2-23 ADD 40300 CMP #1 ;SPECIAL CASE IF ONE0310 BNE GT50Q|}320 LDA #2550330 GT5 CLC 0340 ADC #40350 TAY 0360 LDA (TEMP),Y0370 ORA #1280380 STA (TEMP),Y03Q}}90 INX 0400 CPX NOLINE0410 BNE GT10420 RTS 0430 ;*** DLI ROUTINE ***0440 COLBCK = $D0180450 WSYNC = $D4Q~}0A0460 COLOR = 15380470 PHA ;SAVE ACCUM0480 TXA 0490 PHA 0500 LDX XCOUNT0510 LDA COLOR,X05Q}20 STA WSYNC0530 STA COLBCK0540 INX 0550 CPX NOLINE0560 BNE GT40570 LDA #00580 STA XCOUNT0Q}590 BEQ GT30600 GT4 STX XCOUNT0610 GT3 PLA 0620 TAX 0630 PLA 0640 RTI LDA #00580 STA XCOUNT0P\10 ; SOURCE.06120 ;SETS UP DLI FOR TWO BACKGROUND COLORS. GRAPHICS 1 OR 2 SCREEN.30 *= $060040 VDSLST = 51250 SDLU}STL = 56060 TEMP = $CB70 COLOR = $CD80 PLA 90 LDA SDLSTL+10100 STA TEMP+10110 LDA SDLSTL0120U} STA TEMP ;PUT DISPLAY LIST IN PAGE ZERO FOR ADDRESSING0130 PLA 0140 STA VDSLST+10150 PLA 0160 CLCU} 0170 ADC #50 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 50 MORE THAN BEGINNING0180 STA VDSLST0190 BCC GT102U}00 INC VDSLST+10210 GT1 PLA 0220 PLA ;LOCATION OFFSET FROM DISPLAY LIST TO CHANGE COLOR ON NEXT LINE. ONLYU} 3, AND 6-28 ARE POSSIBLE GR.00230 CMP #10240 BNE GT50250 LDA #2550260 GT5 CLC 0270 ADC #40280 TAY U}0290 LDA #1280300 ORA (TEMP),Y0310 STA (TEMP),Y0320 PLA 0330 PLA ;COLOR0340 STA COLOR0U}350 RTS 0360 ;*** DLI ROUTINE ***0370 COLBCK = $D01A0380 WSYNC = $D40A0390 PHA ;SAVE ACCUM0400 LDA CU}OLOR0410 STA WSYNC0420 STA COLBCK0430 PLA 0440 RTI $D40A0390 PHA ;SAVE ACCUM0400 LDA CTH10 ; SOURCE.06220 ;DLI FOR 3 BACKGROUND COLORS.30 *= $060040 VDSLST = 51250 SDLSTL = 56060 TEMP = $CB70 COLY}OR1 = $CD80 COLOR2 = $CE90 CONTROL = $D00100 PLA 0110 LDA SDLSTL+10120 STA TEMP+10130 LDA SDLSTL0140Y} STA TEMP0150 PLA 0160 STA VDSLST+10170 PLA 0180 CLC 0190 ADC #76 ;STRING ADDRESS OF DLI ROUY}TINE BELOW IS 76 MORE THAN BEGINNING0200 STA VDSLST0210 BCC GT10220 INC VDSLST+10230 GT1 PLA 0240 PLA Y} ;LOCATION OFFSET FROM DISPLAY LIST TO CHANGE COLOR ON NEXT LINE. ONLY 3, AND 6-28 ARE POSSIBLE GR.00250 CMP #102Y}60 BNE GT50270 LDA #2550280 GT5 CLC 0290 ADC #40300 TAY 0310 LDA #1280320 ORA (TEMP),Y0330 Y} STA (TEMP),Y0340 PLA 0350 PLA ;LOCATION OFFSET FROM DISPLAY LIST TO CHANGE COLOR SECOND TIME. ONLY 3, ANDY} 6-28 ARE POSSIBLE0360 CMP #10370 BNE GT70380 LDA #2550390 GT7 CLC 0400 ADC #40410 TAY 0420 LDY}A #1280430 ORA (TEMP),Y0440 STA (TEMP),Y0450 PLA 0460 PLA ;COLOR0470 STA COLOR10480 PLAY} 0490 PLA 0500 STA COLOR20510 LDA #00520 STA CONTROL ;FIRST TIME IS ZERO0530 RTS 0540 ;*** DLI ROUTY}INE ***0550 COLBCK = $D01A0560 WSYNC = $D40A0570 PHA ;SAVE ACCUM0580 LDA CONTROL ;SWITCHES BETWEEN ONE ANY}D ZERO:START AT ZERO0590 BNE GT20600 LDA COLOR10610 INC CONTROL0620 BNE GT30630 GT2 LDA COLOR20640 Y}DEC CONTROL0650 GT3 STA WSYNC0660 STA COLBCK0670 PLA 0680 RTI 0620 BNE GT30630 GT2 LDA COLOR20640 XO10 ; SOURCE.06320 ;DLI FOR 4 BACKGROUND COLORS.30 *= $060040 VDSLST = 51250 SDLSTL = 56060 TEMP = $CB70 COL]}OR1 = $CD80 COLOR2 = $CE90 COLOR3 = $CF0100 CONTROL = $D00110 PLA 0120 LDA SDLSTL+10130 STA TEMP+10140 ]} LDA SDLSTL0150 STA TEMP0160 LDX #30170 PLA 0180 STA VDSLST+10190 PLA 0200 CLC 0210 ADC]} #67 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 67 MORE THAN BEGINNING0220 STA VDSLST0230 BCC GT10240 INC VDS]}LST+10250 GT1 PLA 0260 PLA ;LOCATION OFFSET FROM DISPLAY LIST TO CHANGE COLOR ON NEXT LINE. ONLY 3, AND 6-28 A]}RE POSSIBLE GR.00270 CMP #10280 BNE GT50290 LDA #2550300 GT5 CLC 0310 ADC #40320 TAY 0330 LDA ]}#1280340 ORA (TEMP),Y0350 STA (TEMP),Y0360 DEX 0370 BNE GT10380 PLA 0390 PLA ;COLOR040]}0 STA COLOR10410 PLA 0420 PLA 0430 STA COLOR20440 PLA 0450 PLA 0460 STA COLOR30470 LDA]} #10480 STA CONTROL ;FIRST TIME IS ONE0490 RTS 0500 ;*** DLI ROUTINE ***0510 COLBCK = $D01A0520 WSYNC = $D40A05]}30 PHA ;SAVE ACCUM0540 LDA CONTROL ;STARTS AS ONE, THEN 2 THEN ZERO0550 CMP #10560 BEQ GT4 ;CO]}NTROL = 10570 BCS GT2 ;CONTROL = 20580 LDA COLOR3 ;CONTROL =00590 INC CONTROL ;TO 10600 BNE GT30610]} GT2 LDA COLOR20620 DEC CONTROL0630 DEC CONTROL ;TO ZERO0640 BEQ GT30650 GT4 LDA COLOR10660 INC CONTROL ]};TO 20670 GT3 STA WSYNC0680 STA COLBCK0690 PLA 0700 RTI BEQ GT30650 GT4 LDA COLOR10660 INC CONTROL \I10 ; SOURCE.06420 ;DLI FOR BACKGROUND COLOR CHANGES FOR GRAPHICS 1 AND 2 SCREEN.30 *= $060040 VDSLST = 51250 SDLSa}TL = 56060 TEMP = $CB70 NOLINE = 153680 LINES = 153890 XCOUNT = 15370100 PLA 0110 LDA SDLSTL+10120 a} STA TEMP+10130 LDA SDLSTL0140 STA TEMP ;DISPLAY LIST0150 PLA 0160 STA VDSLST+10170 PLA 0180 a} CLC 0190 ADC #63 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 63 MORE THAN BEGINNING0200 STA VDSLST ;ADDRESS OF DLa}I0210 BCC GT20220 INC VDSLST+10230 GT2 PLA 0240 PLA 0250 STA NOLINE ;LO OF NUMBER OF LINES TO CHANGE INa} 15360260 LDX #00270 STX XCOUNT ;LATER FOR DLI0280 GT1 LDA LINES,X ;STARTING AT 1538 GET LINES TO CHANGE0290 ;LIa}NE NUMBER TO BEGIN DLI. LINE 1=3, LINES 2-23 ADD 40300 CMP #1 ;SPECIAL CASE IF ONE0310 BNE GT50320 LDA #2a}550330 GT5 CLC 0340 ADC #40350 TAY 0360 LDA (TEMP),Y0370 ORA #1280380 STA (TEMP),Y0390 INX 04a}00 CPX NOLINE0410 BNE GT10420 RTS 0430 ;*** DLI ROUTINE ***0440 COLBCK = $D01A0450 WSYNC = $D40A0460 COLOR a}= 15380470 PHA ;SAVE ACCUM0480 TXA 0490 PHA 0500 LDX XCOUNT0510 LDA COLOR,X0520 STA WSYa}NC0530 STA COLBCK0540 INX 0550 CPX NOLINE0560 BNE GT40570 LDA #00580 STA XCOUNT0590 BEQ GTa}30600 GT4 STX XCOUNT0610 GT3 PLA 0620 TAX 0630 PLA 0640 RTI LDA #00580 STA XCOUNT0590 BEQ GT`N10 ; SOURCE.06520 ;SETS UP DLI FOR BACKGROUND COLOR CHANGE FOR GR8 SCREEN, ANY LINES AND ANY COLORS30 *= $060040 VDe}SLST = 51250 SDLSTL = 56060 TEMP = $CB70 NOLINE = 153680 LINES = 153890 XCOUNT = 15370100 PLA 0110 LDe}A SDLSTL+10120 STA TEMP+10130 LDA SDLSTL0140 STA TEMP ;DISPLAY LIST0150 PLA 0160 STA VDSLST+1017e}0 PLA 0180 CLC 0190 ADC #74 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 74 MORE THAN BEGINNING0200 STA VDSe}LST ;ADDRESS OF DLI0210 BCC GT20220 INC VDSLST+10230 GT2 PLA 0240 PLA 0250 STA NOLINE ;LO OF NUMBER OFe} LINES TO CHANGE IN 15360260 LDX #2550270 STX XCOUNT ;LATER FOR DLI0280 LDX #00290 GT1 LDA LINES,X ;STARTINGe} AT 1538 GET LINES TO CHANGE0300 ;LINE NUMBER TO BEGIN DLI. LINE 1=3, LINES 2-95 ADD 4, LINES 96-191,+60310 CMP #96032e}0 BCS GT60330 CMP #1 ;SPECIAL CASE IF ONE0340 BNE GT50350 LDA #2550360 GT5 CLC 0370 ADC #40380e} BNE GT70390 GT6 CLC 0400 ADC #60410 GT7 TAY 0420 LDA (TEMP),Y0430 ORA #1280440 STA (TEMP),Y0450 e} INX 0460 CPX NOLINE0470 BNE GT10480 RTS 0490 ;*** DLI ROUTINE ***0500 COLBCK = $D0180510 WSYNC = $D40A0e}520 COLOR = 15380530 PHA ;SAVE ACCUM0540 TXA 0550 PHA 0560 INC XCOUNT0570 LDX XCOUNT0580 e} LDA COLOR,X0590 STA WSYNC0600 STA COLBCK0610 CPX NOLINE0620 BNE GT30630 LDA #2550640 STA XCOUe}NT0650 GT3 PLA 0660 TAX 0670 PLA 0680 RTI CPX NOLINE0620 BNE GT30630 LDA #2550640 STA XCOUd;10 ; SOURCE.06620 ;SWITCHES CHARACTER SET AT LINE SPECIFIED30 *= $060040 VDSLST = 51250 SDLSTL = 56060 TEMP = i} $CB70 CHRLOC = $CD80 PLA 90 LDA SDLSTL+10100 STA TEMP+10110 LDA SDLSTL0120 STA TEMP ;PUT i}DISPLAY LIST IN PAGE ZERO FOR ADDRESSING0130 PLA 0140 STA VDSLST+10150 PLA 0160 CLC 0170 ADC #50 i} ;STRING ADDRESS OF DLI ROUTINE BELOW IS 50 MORE THAN BEGINNING0180 STA VDSLST0190 BCC GT10200 INC VDSLST+102i}10 GT1 PLA 0220 PLA ;LINE NUMBER TO BEGIN CHANGE. LINE 1-23 ARE POSSIBLE.0230 CMP #10240 BNE GT50250i} LDA #2550260 GT5 CLC 0270 ADC #40280 TAY 0290 LDA (TEMP),Y0300 ORA #1280310 STA (TEMP),Y0320 i} PLA 0330 PLA ;HI BYTE OF LOCATION OF 2ND CHARACTER SET0340 STA CHRLOC0350 RTS 0360 ;*** DLI ROUTIi}NE ***0370 CHBAS = $D4090380 WSYNC = $D40A0390 PHA ;SAVE ACCUM0400 LDA CHRLOC0410 STA WSYNC0420 i} STA CHBAS0430 PLA 0440 RTI $D40A0390 PHA ;SAVE ACCUM0400 LDA CHRLOC0410 STA WSYNC0420 h'10 ; SOURCE.067 LINE 4020 ;INSERTS A CHARACTER SET AT LINES SPECIFIED.30 *= $060040 VDSLST = 51250 SDLSTL = 56m}060 TEMP = $CB70 CHRLOC = $CD80 CONTROL = $CE90 PLA 0100 LDA SDLSTL+10110 STA TEMP+10120 LDA SDLm}STL0130 STA TEMP ;PUT DISPLAY LIST IN PAGE ZERO FOR ADDRESSING0140 PLA 0150 STA VDSLST+10160 PLA 0170m} CLC 0180 ADC #70 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 70 MORE THAN BEGINNING0190 STA VDSLST0200 BCm}C GT10210 INC VDSLST+10220 GT1 PLA 0230 PLA ;LINE NUMBER TO BEGIN CHANGE. LINE 1-23 ARE POSSIBLE.0240 m} CMP #10250 BNE GT50260 LDA #2550270 GT5 CLC 0280 ADC #40290 TAY 0300 LDA (TEMP),Y0310 ORA #1m}280320 STA (TEMP),Y0330 GT3 PLA ;SECOND LINE0340 PLA 0350 CMP #10360 BNE GT40370 LDA #2550m}380 GT4 CLC 0390 ADC #40400 TAY 0410 LDA (TEMP),Y0420 ORA #1280430 STA (TEMP),Y0440 PLA 0450 m} PLA ;HI BYTE OF LOCATION OF 2ND CHARACTER SET0460 STA CONTROL0470 STA CHRLOC0480 RTS 0490 ;*** DLIm} ROUTINE ***0500 CHBAS = $D4090510 WSYNC = $D40A0520 PHA ;SAVE ACCUM0530 LDA CONTROL0540 STA WSYNC0m}550 STA CHBAS0560 CMP #2240570 BEQ GT60580 LDA #2240590 STA CONTROL0600 PLA 0610 RTI 0620 m}GT6 LDA CHRLOC0630 STA CONTROL0640 PLA 0650 RTI A #2240590 STA CONTROL0600 PLA 0610 RTI 0620 l@10 ; SOURCE.06820 ;FLIPS THE SCREEN AT LINE SPECIFIED. GR.0.30 *= $060040 VDSLST = 51250 SDLSTL = 56060 TEMP q}= $CB70 PLA 80 LDA SDLSTL+190 STA TEMP+10100 LDA SDLSTL0110 STA TEMP ;PUT DISPLAY LIST INq} PAGE ZERO FOR ADDRESSING0120 PLA 0130 STA VDSLST+10140 PLA 0150 CLC 0160 ADC #46 ;STRING ADDRESq}S OF DLI ROUTINE BELOW IS 46 MORE THAN BEGINNING0170 STA VDSLST0180 BCC GT10190 INC VDSLST+10200 GT1 PLA 021q}0 PLA ;LINE NUMBER TO BEGIN CHANGE. LINE 1-23 ARE POSSIBLE.0220 CMP #10230 BNE GT50240 LDA #2550q}250 GT5 CLC 0260 ADC #40270 TAY 0280 LDA (TEMP),Y0290 ORA #1280300 STA (TEMP),Y0310 RTS 0320 ;q}*** DLI ROUTINE ***0330 CHACTL = $D4010340 WSYNC = $D40A0350 PHA ;SAVE ACCUM0360 LDA #40370 STA WSYNq}C0380 STA CHACTL0390 PLA 0400 RTI = $D40A0350 PHA ;SAVE ACCUM0360 LDA #40370 STA WSYNp210 ; SOURCE.06920 ;FLIPS THE SCREEN AT LINE SPECIFIED TO LINE SPECIFIED. GR030 *= $060040 VDSLST = 51250 SDLSTL u}= 56060 TEMP = $CB70 CONTROL = $CD80 PLA 90 LDA SDLSTL+10100 STA TEMP+10110 LDA SDLSTL0120 u} STA TEMP ;PUT DISPLAY LIST IN PAGE ZERO FOR ADDRESSING0130 PLA 0140 STA VDSLST+10150 PLA 0160 CLC 01u}70 ADC #68 ;STRING ADDRESS OF DLI ROUTINE BELOW IS 68 MORE THAN BEGINNING0180 STA VDSLST0190 BCC GT10200 u} INC VDSLST+10210 GT1 PLA 0220 PLA ;LINE NUMBER TO BEGIN CHANGE. LINE 1-23 ARE POSSIBLE.0230 CMP #1024u}0 BNE GT50250 LDA #2550260 GT5 CLC 0270 ADC #40280 TAY 0290 LDA #1280300 ORA (TEMP),Y0310 u}STA (TEMP),Y0320 GT2 PLA 0330 PLA ;SECOND LINE NUMBER 1-230340 CMP #10350 BNE GT40360 LDA #2550u}370 GT4 CLC 0380 ADC #40390 TAY 0400 LDA #1280410 ORA (TEMP),Y0420 STA (TEMP),Y0430 LDA #60440u} STA CONTROL0450 RTS 0460 ;*** DLI ROUTINE ***0470 CHACTL = $D4010480 WSYNC = $D40A0490 PHA ;SAVE ACu}CUM0500 LDA CONTROL0510 STA WSYNC0520 STA CHACTL0530 CMP #2 ;NORMAL CHARACTERS0540 BEQ GT60550u} LDA #2 ;WAS 60560 STA CONTROL0570 PLA 0580 RTI 0590 GT6 LDA #6 ;FLIP SCREEN0600 STA CONTRu}OL0610 PLA 0620 RTI STA CONTROL0570 PLA 0580 RTI 0590 GT6 LDA #6 ;FLIP SCREEN0600 STA CONTRt10 ; SOURCE.070 LINE 2020 ;CLEARS ALL DLI COLOR CHANGES FROM A GR0 OR GR1 SCREEN.30 *= $060040 VDSLST = 51250 y}SDLSTL = 56060 TEMP = $CB70 WSYNC = $D40A80 NMIEN = $D40E90 PLA 0100 LDA SDLSTL+10110 STA TEMP+1y}0120 LDA SDLSTL0130 STA TEMP0140 LDY #30150 LDA (TEMP),Y0160 AND #1270170 STA (TEMP),Y0180 y}LDY #60190 GT1 LDA (TEMP),Y0200 AND #1270210 STA (TEMP),Y0220 INY 0230 CPY #290240 BNE GT10250 y} LDA #1440260 STA VDSLST0270 LDA #2310280 STA VDSLST+10290 LDA #640300 STA NMIEN0310 RTS 0 xx10 ; SOURCEA.070 LINE 5020 ;CLEARS ALL DLI COLOR CHANGES FROM A GR2 SCREEN30 *= $060040 VDSLST = 51250 SDLSTL }}= 56060 TEMP = $CB70 NMIEN = $D40E80 PLA 90 LDA SDLSTL+10100 STA TEMP+10110 LDA SDLSTL0120 }} STA TEMP0130 LDY #30140 LDA (TEMP),Y0150 AND #1270160 STA (TEMP),Y0170 LDY #60180 GT1 LDA (TEMP)}},Y0190 AND #1270200 STA (TEMP),Y0210 INY 0220 CPY #170230 BNE GT10240 LDA #1440250 STA VDS}}LST0260 LDA #2310270 STA VDSLST+10280 LDA #640290 STA NMIEN0300 RTS 0 LDA #1440250 STA VDS|^10 ; SOURCEB.070 LINE 8020 ;CLEARS ALL DLI COLOR CHANGES FROM A GR8 SCREEN.30 *= $060040 VDSLST = 51250 SDLSTL }= 56060 TEMP = $CB70 NMIEN = $D40E80 PLA 90 LDA SDLSTL+10100 STA TEMP+10110 LDA SDLSTL0120 } STA TEMP0130 LDY #30140 LDA (TEMP),Y0150 AND #1270160 STA (TEMP),Y ;FIRST LINE0170 LDY #60180 GT}1 LDA (TEMP),Y0190 AND #1270200 STA (TEMP),Y0210 INY 0220 CPY #100 ;UP TO BOUNDARY JUMP0230 BNE G}T10240 LDA #1020250 GT2 LDA (TEMP),Y0260 AND #1270270 STA (TEMP),Y0280 INY 0290 CPY #1990300 B}NE GT20310 LDA #1440320 STA VDSLST0330 LDA #2310340 STA VDSLST+10350 LDA #640360 STA NMIEN0370} RTS 0 LDA #1440320 STA VDSLST0330 LDA #2310340 STA VDSLST+10350 LDA #640360 STA NMIEN0370 10 ; SOURCE.071 LINE 1020 ;READ JOYSTICK 0 WITH RESULT IN RETURN VARIABLE(212) :1=UP,2=D,3=L,4=R,0=NEUTRAL30 *= $}060040 PORTA = $D300 ;JOYSTICK READING50 RETVAR = $D4 ;RETURN VARIABLE60 PLA 70 LDA #080 STA }RETVAR+1 ;SET HI BYTE=090 LDA PORTA ;JOYSTICK VALUE0100 TAX 0110 AND #1 ;IS BIT 0=1?0120 BEQ UP } ;WAS 6,10,OR 140130 TXA 0140 AND #2 ;000000100150 BEQ DOWN0160 TXA 0170 AND #4 ; 0000}01000180 BEQ LEFT ;WAS 9,10, OR 110190 TXA 0200 AND #8 ;000010000210 BEQ RIGHT ;WAS 5,6, OR 70}220 LDA #0 ;JOYSTICK IN CENTER POSITION0230 DONE STA RETVAR0240 RTS 0250 UP LDA #10260 BNE DONE0270 DO}WN LDA #20280 BNE DONE0290 LEFT LDA #30300 BNE DONE0310 RIGHT LDA #40320 BNE DONE0260 BNE DONE0270 DOc10 ; SOURCEA.071 LINE 9020 ;READS JOYSTICK 1 AND PLACES CODED VALUE IN RETURN VARIABLE : 1=UP,2=D,3=L,4=R, 0=NEUTRAL.30 } *= $060040 PORTA = $D300 ;JOYSTICK READING50 RETVAR = $D4 ;RETURN VARIABLE60 PLA 70 LDA #080 } STA RETVAR+1 ;SET HI BYTE=090 LDA PORTA ;JOYSTICK VALUE0100 TAX 0110 AND #16 ;IS BIT 4=1?0120 } BEQ UP ;WAS 6,10,OR 140130 TXA 0140 AND #32 ;000000100150 BEQ DOWN0160 TXA 0170 AND #64 } ; 000001000180 BEQ LEFT ;WAS 9,10, OR 110190 TXA 0200 AND #128 ;000010000210 BEQ RIGHT ;WAS 5},6, OR 70220 LDA #0 ;JOYSTICK IN CENTER POSITION0230 DONE STA RETVAR0240 RTS 0250 UP LDA #10260 BNE DO}NE0270 DOWN LDA #20280 BNE DONE0290 LEFT LDA #30300 BNE DONE0310 RIGHT LDA #40320 BNE DONE0260 BNE DOm10 ; SOURCE.072 LINE 1020 ;READ JOYSTICK 0 ,1=UP,2=D,3=L,4=R,5=UL,6=UR,7=DR,8=DL,0=NEUTRAL30 *= $060040 PORTA = } $D300 ;JOYSTICK READING50 RETVAR = $D4 ;RETURN VARIABLE60 PLA 70 LDA #080 STA RETVAR+1 ;SET HI }BYTE=090 LDA PORTA ;JOYSTICK VALUE0100 AND #15 ;CLEAR HI NIBBLE0110 TAX 0120 AND #1 ;IS BIT }0=1?0130 BEQ UPS ;WAS 6,10,OR 140140 TXA 0150 AND #2 ;000000100160 BEQ DOWNS0170 TXA 0180 } AND #4 ; 000001000190 BEQ LEFTS ;WAS 9,10, OR 110200 TXA 0210 AND #8 ;000010000220 BEQ RI }GHTS ;WAS 5,6, OR 70230 LDA #0 ;JOYSTICK IN CENTER POSITION0240 DONE STA RETVAR0250 RTS 0260 UPS CPX #1002 }70 BEQ UL ;UPPER LEFT0280 BCS UP0290 UR LDA #6 ;UPPER RIGHT0300 BNE DONE0310 UL LDA #5 ;UPPE }R LEFT0320 BNE DONE0330 UP LDA #10340 BNE DONE0350 DOWNS CPX #90360 BEQ DL0370 BCS DOWN0380 DR LDA # }7 ;DOWN RIGHT0390 BNE DONE0400 DL LDA #8 ;DOWN LEFT0410 BNE DONE0420 DOWN LDA #20430 BNE DONE044}0 LEFTS CPX #100450 BEQ UL0460 BCS LEFT0470 BCC DL0480 BNE DONE0490 LEFT LDA #30500 BNE DONE0510 R}IGHTS CPX #60520 BEQ UR0530 BCS RIGHT0540 BCC DR0550 RIGHT LDA #40560 BNE DONE0500 BNE DONE0510 Rd10 ; SOURCEA.07220 ;READS JOYSTICK 1 ,1=UP,2=D,3=L,4=R,5=UL,6=UR,7=DR,8=DL,0=NEUTRAL30 *= $060040 PORTA = $D300 } ;JOYSTICK READING50 RETVAR = $D4 ;RETURN VARIABLE60 PLA 70 LDA #080 STA RETVAR+1 ;SET HI BYTE=09}0 LDA PORTA ;JOYSTICK VALUE0100 LSR A0110 LSR A0120 LSR A0130 LSR A ;PUT HI NIBBLE INTO LOW} NIBBLE AND CLEAR HIGH NIBBLE0140 TAX 0150 AND #1 ;IS BIT 0=1?0160 BEQ UPS ;WAS 6,10,OR 140170 T}XA 0180 AND #2 ;000000100190 BEQ DOWNS0200 TXA 0210 AND #4 ; 000001000220 BEQ LEFTS ;WAS} 9,10, OR 110230 TXA 0240 AND #8 ;000010000250 BEQ RIGHTS ;WAS 5,6, OR 70260 LDA #0 ;JOYSTICK }IN CENTER POSITION0270 DONE STA RETVAR0280 RTS 0290 UPS CPX #100300 BEQ UL ;UPPER LEFT0310 BCS UP0320 }UR LDA #6 ;UPPER RIGHT0330 BNE DONE0340 UL LDA #5 ;UPPER LEFT0350 BNE DONE0360 UP LDA #10370 BN}E DONE0380 DOWNS CPX #90390 BEQ DL0400 BCS DOWN0410 DR LDA #7 ;DOWN RIGHT0420 BNE DONE0430 DL LDA #8} ;DOWN LEFT0440 BNE DONE0450 DOWN LDA #20460 BNE DONE0470 LEFTS CPX #100480 BEQ UL0490 BCS LEFT05}00 BCC DL0510 BNE DONE0520 LEFT LDA #30530 BNE DONE0540 RIGHTS CPX #60550 BEQ UR0560 BCS RIGHT0570} BCC DR0580 RIGHT LDA #40590 BNE DONE0530 BNE DONE0540 RIGHTS CPX #60550 BEQ UR0560 BCS RIGHT0570010 ; SOURCE.07320 ;READS INPUTED JOYSTICK 0-3 :1=UP,2=D,3=L,4=R30 *= $060040 PORTA = $D300 ;JOYSTICK 0 & 150 }PORTB = $D301 ;JOYSTICK 2 & 360 RETVAR = $D4 ;RETURN VARIABLE70 PLA 80 LDA #090 STA RETVAR+1 ;}SET HI BYTE=00100 PLA 0110 PLA 0120 TAY ;0,1,2, OR 3 REPRESENTING JOYSTICK OF CHOICE0130 CPY #20}140 BCC JY01 ;0 OR 10150 LDA PORTB ;2 OR 30160 CPY #20170 BEQ START0180 JY13 LSR A0190 LSR A02 }00 LSR A0210 LSR A0220 CLC 0230 BCC START0240 JY01 LDA PORTA ;JOYSTICK VALUE0250 CPY #1 ;JOYST!}ICK 10260 BEQ JY130270 START TAX 0280 AND #1 ;IS BIT 0=1?0290 BEQ UP ;WAS 6,10,OR 140300 TXA "}0310 AND #2 ;000000100320 BEQ DOWN0330 TXA 0340 AND #4 ; 000001000350 BEQ LEFT ;WAS 9,10#}, OR 110360 TXA 0370 AND #8 ;000010000380 BEQ RIGHT ;WAS 5,6, OR 70390 LDA #0 ;JOYSTICK IN CE$}NTER POSITION0400 DONE STA RETVAR0410 RTS 0420 UP LDA #10430 BNE DONE0440 DOWN LDA #20450 BNE DONE0460 LE%}FT LDA #30470 BNE DONE0480 RIGHT LDA #40490 BNE DONE0430 BNE DONE0440 DOWN LDA #20450 BNE DONE0460 LE@10 ; SOURCE.07420 ;READS JOYSTICK INPUTED WITH CODED RESULT IN RETURN VARIABLE: 1=UP,2=D,3=L,4=R,5=UL,6=UR,7=DR,8=DL,0=NEUT'}RAL30 *= $060040 PORTA = $D300 ;JOYSTICK READING50 PORTB = $D30160 RETVAR = $D4 ;RETURN VARIABLE70 (} PLA 80 LDA #090 STA RETVAR+1 ;SET HI BYTE=00100 PLA 0110 PLA 0120 TAY ;GET CORRECT JO)}YSTICK TO READ0130 CPY #20140 BCC JY01 ;0 OR 10150 LDA PORTB ;2 OR 30160 CPY #20170 BEQ START0*}180 JY13 LSR A0190 LSR A0200 LSR A0210 LSR A0220 BPL START10230 JY01 LDA PORTA0240 CPY #1 ;JOY+}STICK 10250 BEQ JY130260 START AND #15 ;CLEAR HI NIBBLE0270 START1 TAX 0280 AND #1 ;IS BIT 0=1?0290 B,}EQ UPS ;WAS 6,10,OR 140300 TXA 0310 AND #2 ;000000100320 BEQ DOWNS0330 TXA 0340 AND #4 -} ; 000001000350 BEQ LEFTS ;WAS 9,10, OR 110360 TXA 0370 AND #8 ;000010000380 BEQ RIGHTS ;WAS 5,6,.} OR 70390 LDA #0 ;JOYSTICK IN CENTER POSITION0400 DONE STA RETVAR0410 RTS 0420 UPS CPX #100430 BEQ UL /} ;UPPER LEFT0440 BCS UP0450 UR LDA #6 ;UPPER RIGHT0460 BNE DONE0470 UL LDA #5 ;UPPER LEFT0480 0} BNE DONE0490 UP LDA #10500 BNE DONE0510 DOWNS CPX #90520 BEQ DL0530 BCS DOWN0540 DR LDA #7 ;DOWN RI1}GHT0550 BNE DONE0560 DL LDA #8 ;DOWN LEFT0570 BNE DONE0580 DOWN LDA #20590 BNE DONE0600 LEFTS CPX #102}0610 BEQ UL0620 BCS LEFT0630 BCC DL0640 BNE DONE0650 LEFT LDA #30660 BNE DONE0670 RIGHTS CPX #6063}80 BEQ UR0690 BCS RIGHT0700 BCC DR0710 RIGHT LDA #40720 BNE DONE0660 BNE DONE0670 RIGHTS CPX #606U10 ; SOURCE.07520 ;READS JOYSTICK 0 & 1 AND PLACES CODED VALUE FOR JYSTK 0 IN 203 AND 212(RETURN VARIABLE) AND JYSTK 1 IN 205}4.30 ;CODED VALUES: 1=UP,2=D,3=L,4=R,5=UL,6=UR,7=DR,8=DL,0=NEUTRAL40 *= $060050 PORTA = $D300 ;JOYSTICK READ6}ING60 RETVAR = $D4 ;RETURN VARIABLE70 ST1 = 204 ;STICK(1) CODED VALUE80 ST0 = 20390 PLA 0100 7}LDA #00110 STA RETVAR+1 ;SET HI BYTE=00120 LDY #1 ;COUNTER0130 LDA PORTA ;JOYSTICK VALUE0140 AND #8}15 ;CLEAR HI NIBBLE0150 GT1 TAX 0160 AND #1 ;IS BIT 0=1?0170 BEQ UPS ;WAS 6,10,OR 140180 TXA 019}90 AND #2 ;000000100200 BEQ DOWNS0210 TXA 0220 AND #4 ; 000001000230 BEQ LEFTS ;WAS 9,10,:} OR 110240 TXA 0250 AND #8 ;000010000260 BEQ RIGHTS ;WAS 5,6, OR 70270 LDA #0 ;JOYSTICK IN CEN;}TER POSITION0280 DONE DEY 0290 BEQ STICK10300 STA ST1 ;STICK(1)0310 RTS 0320 UPS CPX #100330 BEQ UL<} ;UPPER LEFT0340 BCS UP0350 UR LDA #6 ;UPPER RIGHT0360 BNE DONE0370 UL LDA #5 ;UPPER LEFT0380 =} BNE DONE0390 UP LDA #10400 BNE DONE0410 DOWNS CPX #90420 BEQ DL0430 BCS DOWN0440 DR LDA #7 ;DOWN >}RIGHT0450 BNE DONE0460 DL LDA #8 ;DOWN LEFT0470 BNE DONE0480 DOWN LDA #20490 BNE DONE0500 LEFTS CPX #?}100510 BEQ UL0520 BCS LEFT0530 BCC DL0540 BNE DONE0550 LEFT LDA #30560 BNE DONE0570 RIGHTS CPX #6@}0580 BEQ UR0590 BCS RIGHT0600 BCC DR0610 RIGHT LDA #40620 BNE DONE0630 STICK1 STA RETVAR ;STICK(0) CODEDA} VALUE0640 STA ST00650 LDA PORTA0660 LSR A0670 LSR A0680 LSR A0690 LSR A ;HI NIBBLE INTO B}LO NIBBLE0700 BPL GT10 LDA PORTA0660 LSR A0670 LSR A0680 LSR A0690 LSR A ;HI NIBBLE INTO 10 ; SOURCE.07620 ;READS BOTH JOYSTICKS 2 & 3: 2 JOYSTICK IN 205 AND 3 IN 206: 1=UP,2=D,3=L,4=R,5=UL,6=UR,7=DR,8=DL,0=NEUTRD}AL.30 *= $060040 PORTB = $D301 ;JOYSTICK READING50 ST2 = 205 ;STICK(2) CODED VALUE60 ST3 = 206 E} ;STICK(1) CODED VALUE70 PLA 80 LDY #1 ;COUNTER90 LDA PORTB ;JOYSTICK VALUE0100 AND #15 F};CLEAR HI NIBBLE0110 GT1 TAX 0120 AND #1 ;IS BIT 0=1?0130 BEQ UPS ;WAS 6,10,OR 140140 TXA 0150 G}AND #2 ;000000100160 BEQ DOWNS0170 TXA 0180 AND #4 ; 000001000190 BEQ LEFTS ;WAS 9,10, OR 11H}0200 TXA 0210 AND #8 ;000010000220 BEQ RIGHTS ;WAS 5,6, OR 70230 LDA #0 ;JOYSTICK IN CENTER POSI}ITION0240 DONE DEY 0250 BEQ STICK30260 STA ST3 ;STICK(3)0270 RTS 0280 UPS CPX #100290 BEQ UL ;J}UPPER LEFT0300 BCS UP0310 UR LDA #6 ;UPPER RIGHT0320 BNE DONE0330 UL LDA #5 ;UPPER LEFT0340 BNE K}DONE0350 UP LDA #10360 BNE DONE0370 DOWNS CPX #90380 BEQ DL0390 BCS DOWN0400 DR LDA #7 ;DOWN RIGHT0L}410 BNE DONE0420 DL LDA #8 ;DOWN LEFT0430 BNE DONE0440 DOWN LDA #20450 BNE DONE0460 LEFTS CPX #100470M} BEQ UL0480 BCS LEFT0490 BCC DL0500 BNE DONE0510 LEFT LDA #30520 BNE DONE0530 RIGHTS CPX #60540 N} BEQ UR0550 BCS RIGHT0560 BCC DR0570 RIGHT LDA #40580 BNE DONE0590 STICK3 STA ST2 ;STICK(2) CODED VALUE06O}00 LDA PORTB0610 LSR A0620 LSR A0630 LSR A0640 LSR A ;HI NIBBLE INTO LO NIBBLE0650 CLC 06P}60 BCC GT1B0610 LSR A0620 LSR A0630 LSR A0640 LSR A ;HI NIBBLE INTO LO NIBBLE0650 CLC 0610 ; SOURCE.07720 ;READS ALL 4 JOYSTICKS: 0 JYSTK IN 203,1 IN 204,2 IN 205, AND 3 IN 20630 ;VALUES LEFT IN ABOVE MEMORY REGR}ISTERS ARE CODED AS 1=UP,2=D,3=L,4=R,5=UL,6=UR,7=DR,8=DL,0=NEUTRAL.40 *= $060050 PORTA = $D300 ;JOYSTICKS 0 & 1S}60 PORTB = $D301 ;JOYSTICKS 2 & 370 ST0 = 20380 ST1 = 20490 ST2 = 2050100 ST3 = 206 ;CODED VALUES FT}OR JOYSTICKS0110 PLA 0120 LDY #4 ;COUNTER0130 LDA PORTA ;JOYSTICK VALUE FOR 0 & 10140 GT4 AND #15 U};CLEAR HI NIBBLE0150 GT1 TAX 0160 AND #1 ;IS BIT 0=1?0170 BEQ UPS ;WAS 6,10,OR 140180 TXA 0190 V}AND #2 ;000000100200 BEQ DOWNS0210 TXA 0220 AND #4 ; 000001000230 BEQ LEFTS ;WAS 9,10, OR 11W}0240 TXA 0250 AND #8 ;000010000260 BEQ RIGHTS ;WAS 5,6, OR 70270 LDA #0 ;JOYSTICK IN CENTER POSX}ITION0280 DONE DEY 0290 CPY #20300 BEQ JY1 ;SAVE JYSTK 1 VALUE0310 BCS JY0 ;SAVE JYSTK 0 VALUE0320 Y} CPY #10330 BEQ JY2 ;SAVE JYSTK 2 VALUE0340 STA ST3 ;SAVE JYSTK 3 VALUE AND EXIT0350 RTS 0360 JY0 SZ}TA ST00370 BPL GT20380 JY1 STA ST10390 LDA PORTB ;FOR 2 & 3 JYSTKS0400 CLC 0410 BCC GT40420 JY2 STA S[}T20430 LDA PORTB0440 CLC 0450 BCC GT30460 UPS CPX #100470 BEQ UL ;UPPER LEFT0480 BCS UP0490 U\}R LDA #6 ;UPPER RIGHT0500 BNE DONE0510 UL LDA #5 ;UPPER LEFT0520 BNE DONE0530 UP LDA #10540 BNE]} DONE0550 DOWNS CPX #90560 BEQ DL0570 BCS DOWN0580 DR LDA #7 ;DOWN RIGHT0590 BNE DONE0600 DL LDA #8 ^} ;DOWN LEFT0610 BNE DONE0620 DOWN LDA #20630 BNE DONE0640 LEFTS CPX #100650 BEQ UL0660 BCS LEFT067_}0 BCC DL0680 BNE DONE0690 LEFT LDA #30700 BNE DONE0710 RIGHTS CPX #60720 BEQ UR0730 BCS RIGHT0740 `} BCC DR0750 RIGHT LDA #40760 BNE DONE0770 GT2 LDA PORTA0780 GT3 LSR A0790 LSR A0800 LSR A0810 LSR Aa} ;HI NIBBLE INTO LO NIBBLE0820 BPL GT10 GT2 LDA PORTA0780 GT3 LSR A0790 LSR A0800 LSR A0810 LSR A210 ; SOURCE.079 LINE 50020 ;PLAYER MOVER UP, ONE BYTE MOVE.30 *= $060040 PLAYADR = $CB ;PLAYER ADDRESS + Y VALc}UE50 SIZE = $D1 ;POKED IN FROM BASIC: VERTICAL SIZE OF P/M60 PLA 70 PLA 80 STA PLAYADR+190 d} PLA 0100 STA PLAYADR ;ADDRESS OF P/M STORAGE AREA + Y LOCATION0110 DEC PLAYADR ;SO Y DOES NOT NEED TO GO FROM 0 Te}O 2550120 PLA 0130 PLA 0140 TAX ;SIZE OF FIGURE0150 LDY #1 ;FIRST BYTE TO MOVE0160 LOOP LDAf} (PLAYADR),Y ;BOTTOM MOST BYTE OF P/M ON SCREEN0170 DEY 0180 STA (PLAYADR),Y ;NEXT BYTE LOWER IN MEMORY OR UP SCREEg}N0190 INY 0200 INY 0210 DEX 0220 BPL LOOP0230 RTS PLAYADR),Y ;NEXT BYTE LOWER IN MEMORY OR UP SCREEL10 ; SOURCEA.079 LINE 51020 ;PLAYER MOVER DOWN, ONE BYTE MOVE.30 *= $060040 PLAYADR = $CB ;PLAYER STARTING ADi}DRESS + Y LOCATION50 SIZE = $D1 ;(212) POKED IN FROM BASIC: ACTUAL HEIGHT OF FIGURE60 PLA 70 PLA 80 j} STA PLAYADR+190 PLA 0100 STA PLAYADR ;ADDRESS OF P/M STORAGE AREA + Y LOCATION0110 DEC PLAYADR0120 k}PLA 0130 PLA 0140 TAY ;VERTICAL SIZE OF PLAYER0150 LOOP LDA (PLAYADR),Y ;BOTTOM MOST BYTE OF P/M ON SCREENl}0160 INY 0170 STA (PLAYADR),Y ;NEXT BYTE HIGHER IN MEMORY OR DOWN SCREEN0180 DEY 0190 DEY 0200 BPL Lm}OOP0210 RTS 0 STA (PLAYADR),Y ;NEXT BYTE HIGHER IN MEMORY OR DOWN SCREEN0180 DEY 0190 DEY 0200 BPL L10 ; SOURCE.080 LINE 50020 ;PLAYER MOVER UP, 2 BYTE MOVE.30 *= $060040 PLAYADR = $CB ;PLAYER ADDRESS + Y VALUo}E50 SIZE = $D1 ;POKED IN FROM BASIC: VERTICAL SIZE OF P/M60 PLA 70 PLA 80 STA PLAYADR+190 p} PLA 0100 STA PLAYADR ;ADDRESS OF P/M STORAGE AREA + Y LOCATION0110 DEC PLAYADR0120 DEC PLAYADR ;SO Y DOES NOTq} NEED TO GO FROM 1 TO 2550130 LDY #2 ;FIRST BYTE TO MOVE0140 PLA 0150 PLA 0160 TAX ;VERTICALr} SIZE OF PLAYER USED AS A COUNTER0170 INX 0180 LOOP LDA (PLAYADR),Y ;BOTTOM MOST BYTE OF P/M ON SCREEN0190 DEY 02s}00 DEY 0210 STA (PLAYADR),Y ;NEXT BYTE LOWER IN MEMORY OR UP SCREEN0220 INY 0230 INY 0240 INY 0250 t} DEX 0260 BPL LOOP0270 RTS XT BYTE LOWER IN MEMORY OR UP SCREEN0220 INY 0230 INY 0240 INY 0250 (10 ; SOURCEA.080 LINE 51020 ;PLAYER MOVER DOWN, 2 BYTE MOVE.30 *= $060040 PLAYADR = $CB ;PLAYER STARTING ADDRv}ESS + Y LOCATION50 SIZE = $D1 ;POKED IN FROM BASIC: ACTUAL HEIGHT OF FIGURE60 PLA 70 PLA 80 STA w}PLAYADR+190 PLA 0100 STA PLAYADR ;ADDRESS OF P/M STORAGE AREA + Y LOCATION0110 DEC PLAYADR0120 DEC PLAYx}ADR0130 PLA 0140 PLA 0150 TAY ;VERTICAL SIZE OF PLAYER0160 INY ;SET UP TO GET LAST BYTE Iy}N FIGURE0170 LOOP LDA (PLAYADR),Y ;BOTTOM MOST BYTE OF P/M ON SCREEN0180 INY 0190 INY ;FOR 2 BYTE MOVE020z}0 STA (PLAYADR),Y ;NEXT 2 BYTES HIGHER IN MEMORY OR DOWN SCREEN0210 DEY 0220 DEY 0230 DEY ;DROP UP{} FIGURE AND GET NEXT BYTE0240 BPL LOOP0250 RTS WN SCREEN0210 DEY 0220 DEY 0230 DEY ;DROP UP:10 ; SOURCE.081 LINE 2020 ;SETS UP PM LEAVING STARTING ADDESS OF MISSLE AREA IN $CB AND LENGTH TO CLEAR IN $CD FOR SOURCEA}}.081 TO USE.30 ;THIS WAY A STRING DOES NOT HAVE TO BE DIMENSIONED40 GPRIOR = 623 ;PRIORITY SELECTION REGISTER50 MISAD~}R = $CB ;WHERE MISSLES ADDRESS STARTS FOR CLEAR PM AREA ROUTINE60 LEN = $CD70 PAGE = $CF ;PAGE SETBACK FOR }PM STORAGE AREA80 RETVAR = $D4 ;FOR RETURN VARIABLE90 PMBASE = 54279 ;ADDRESS OF PM0100 SDMCTL = 559 ;DMA ENABL}E0110 GRACTL = 53277 ;ENACT PM0120 *= $06000130 PLA 0140 PLA 0150 PLA 0160 STA PAGE0170 LDA }106 ;RAMTOP0180 SEC 0190 SBC PAGE0200 STA PMBASE ;WHERE PM STORAGE IS TO BEGIN0210 STA RETVAR+1 ;AND} IN RETURN VARIABLE HI BYTE0220 PLA 0230 PLA 0240 STA GPRIOR ;SET PRIORITY OF PLAYERS AND PLAYFIELD0250 }LDX #62 ;SINGLE LINE RESOLUTION0260 PLA 0270 PLA ;1 FOR SINGLE LINE RESOLUTION AND 2 FOR DOUBLE LINE02}80 CMP #10290 BEQ SINGLE0300 LDX #46 ;DOUBLE LINE RESOLUTION0310 SINGLE STX SDMCTL0320 LDA #3 ;P}LAYER AND MISSLE ENABLE0330 STA GRACTL0340 ;SET UP MEMORY TO BE CLEARED IN NEXT USR STATEMENT0350 CPX #460360 } BEQ DOUBLE0370 LDA #00380 STA LEN0390 STA MISADR0400 LDA #5 ;5 PAGES EVEN TO CLEAR IN SINGLE LINE R}ESOLUTION0410 STA LEN+10420 LDA #3 ;MISSLE ADDRESS STARTS 3 PAGES EVEN AFTER PMBASE0430 BNE CLEAR0440 DO}UBLE LDA #1280450 STA LEN0460 STA MISADR0470 LDA #2 ;2.5 PAGES TO CLEAR IN DOUBLE LINE RESOLUTION0480 } STA LEN+10490 LDA #10500 CLEAR CLC 0510 ADC RETVAR+10520 STA MISADR+1 ;START OF MEMORY TO BE CLEARED IS NOW} SET0530 LDA #0 ;FILL MEMORY WITH 00540 STA RETVAR ;CLEAR LO BYTE OF RETURN VARIABLE0550 RTS RED IS NOWs10 ; SOURCEA.081 LINE 3020 ;CLEARS PM AREA ONLY WHEN RUN AFTER SOURCE.081.30 MISADR = $CB ;WHERE MISSLES ADDRESS STA}RTS FOR CLEAR PM AREA ROUTINE40 LEN = $CD50 *= $060060 PLA 70 LDA #0 ;CLEAR MEMORY80 L}DX LEN+1 ;START BY CLEARING FULL PAGES90 BEQ LO0100 LDY #00110 GT2 STA (MISADR),Y0120 INY 0130 BNE G}T20140 INC MISADR+10150 DEX 0160 BNE GT20170 LO LDY LEN ;NOW CLEAR LAST NOT FULL PAGE0180 BEQ DONE}0190 GT3 DEY 0200 STA (MISADR),Y0210 CPY #2550220 BNE GT30230 DONE RTS LAST NOT FULL PAGE0180 BEQ DONEX10 ; SOURCE.082 LINE 7020 ;SETS UP PLAYERS IN PM.30 *= $060040 PLSADR = $CB ;PLAYER SHAPE ADDRESS50 PLDADR ‘}= $D4 ;FROM SETUP2.SRC60 LEN = $CF ;NUMBER OF BYTES IN PLAYER SHAPE70 TEMP = $D080 YHOLD = $D190 HPOSP0’} = 53248 ;HORIZONTAL POSITION OF PLAYER ZERO0100 SIZEP0 = 53256 ;HORIZONTAL SIZE OF PLAYER 00110 PLA 0120 PLA “}0130 STA PLDADR+1 ;HI BYTE OF PMBASE0140 PLA 0150 STA PLDADR ;SOME CASES0160 STA TEMP ;USED AS A Y HO”}LDER AND IS EQUAL TO 00170 INC PLDADR+10180 INC PLDADR+1 ;IF DOUBLE RESOLUTION THEN THIS IS PLAYER 0 ADDRESS0190 •} PLA 0200 PLA ;WHICH PLAYER, 0-30210 TAX 0220 PLA 0230 STA PLSADR+10240 PLA 0250 STA –}PLSADR ;WHERE SHAPE DATA IS0260 PLA 0270 PLA 0280 STA HPOSP0,X ;HORIZONTAL POSITION REGISTER0290 PLA 03—}00 PLA 0310 STA SIZEP0,X ;HORIZONTAL SIZE, 0,1,30320 PLA 0330 PLA ;RESOLUTION0340 CMP #10350˜} BEQ SINGLE0360 CPX #10370 BCC GT00380 BEQ GT10390 INC PLDADR+1 ;PLAYERS 2 & 30400 CPX #20410 ™} BEQ GT00420 GT1 LDA #128 ;PLAYERS 1 & 30430 STA PLDADR0440 BNE GT00450 SINGLE0460 INC PLDADR+10470 š} INC PLDADR+1 ;STARTING ADDRESS OF PLAYER ZERO IN SINGLE RESOLUTION0480 CPX #00490 BEQ GT00500 GT4 INC PLDADR+1 ;›}ONE PAGE PER PLAYER0510 DEX 0520 BNE GT40530 GT0 PLA 0540 PLA 0550 STA YHOLD ;VERTICAL POSITION OF PLAœ}YER WITHIN MEMORY BLOCK0560 PLA 0570 PLA 0580 TAX ;SIZE (HEIGHT) OF PLAYER IN BYTES0590 LOOP LDY TEMP}0600 LDA (PLSADR),Y ;GET PLAYER SHAPE DATA0610 INC TEMP0620 LDY YHOLD0630 STA (PLDADR),Y ;PUT PLAYER IN Pž}M AREA0640 INC YHOLD0650 DEX 0660 BNE LOOP0670 ;PLAYER IS NOW IN MEMORY0680 RTS ADR),Y ;PUT PLAYER IN Pf10 ; SOURCE.083 LINE 8320 ;PLAYER MOVER UP. STOP OR WRAP AROUND LIMITS. SINGLE BYTE MOVE.30 *= $060040 PLAYAƠ}DR = $CB ;PLAYER ADDRESS + Y VALUE50 YLOC = $D4 ;RETURN VARIABLE60 YHI = $CD70 SIZE = $CF80 YLO = $ơ}CE90 PLA 0100 LDA #00110 STA YLOC+10120 PLA 0130 STA PLAYADR+10140 PLA 0150 STA PLAYADR Ƣ};ADDRESS OF PLAYER BEGINING ADDRESS0160 PLA 0170 PLA 0180 TAY ;PRESENT Y VALUE0190 STA YLOC0200 ƣ} PLA 0210 PLA ;SIZE OF SHAPE0220 TAX 0230 STA SIZE0240 PLA 0250 PLA 0260 STA YLO Ƥ} ;LO TEST LIMIT0270 CMP YLOC0280 BEQ TEST0290 LOOP LDA (PLAYADR),Y ;TOP MOST BYTE OF P/M ON SCREEN0300 DEY 0ƥ}310 STA (PLAYADR),Y ;NEXT BYTE LOWER IN MEMORY OR UP SCREEN0320 INY 0330 INY 0340 DEX 0350 BPL LOOP0Ʀ}360 DEC YLOC ;NEW Y VALUE0370 PLA 0380 PLA 0390 PLA 0400 PLA ;REMOVE FROM STACK, NOT USEDƧ}0410 DONE RTS 0420 TEST PLA 0430 PLA 0440 STA YHI ;HI LIMIT0450 PLA 0460 PLA ;0=STOP AT LIMIƨ}TS AND 1=WRAP0470 BEQ DONE0480 LDA YHI0490 SEC 0500 SBC SIZE0510 STA YHI ;WHERE NEW SHAPE IS TO Ʃ}WRAP AROUND SCREEN0520 STA YLOC0530 LP2 LDY YLO0540 LDA (PLAYADR),Y0550 LDY YHI0560 STA (PLAYADR),Y0570ƪ} LDA #00580 LDY YLO0590 STA (PLAYADR),Y ;ZERO OUT OLD PLAYER0600 INC YLO0610 INC YHI0620 DEX 06ƫ}30 BPL LP20640 RTS 0590 STA (PLAYADR),Y ;ZERO OUT OLD PLAYER0600 INC YLO0610 INC YHI0620 DEX 0610 ; SOURCEA.083 LINE 8620 ;PLAYER MOVER DOWN. STOP OR WRAP AROUND LIMITS. SINGLE BYTE MOVE.30 *= $060040 PLAʭ}YADR = $CB ;PLAYER STARTING ADDRESS + Y LOCATION50 YLOC = $D4 ;RETURN VARIABLE60 YHI = $CD70 YLO = $CEʮ}80 PLA 90 LDA #00100 STA YLOC+10110 PLA 0120 STA PLAYADR+10130 PLA 0140 STA PLAYADR ;STʯ}ARTING ADDRESS OF PLAYER0150 PLA 0160 PLA 0170 STA YLOC ;PRESENT Y LOCATION0180 PLA 0190 PLA 020ʰ}0 STA YHI ;HI LIMIT OR BOTTOM OF SCREEN0210 PLA 0220 PLA ;SIZE OF PLAYER SHAPE0230 TAX 0240 ʱ} CLC 0250 ADC YLOC0260 CMP YHI0270 BEQ TEST0280 TAY ;BOTTOM BYTE OF SHAPE0290 DEY 0300 LOʲ}OP LDA (PLAYADR),Y ;BOTTOM MOST BYTE OF P/M ON SCREEN0310 INY 0320 STA (PLAYADR),Y ;NEXT BYTE HIGHER IN MEMORY OR Dʳ}OWN SCREEN0330 DEY 0340 DEY 0350 DEX 0360 BPL LOOP0370 DONE INC YLOC0380 PLA 0390 PLA 0400 ʴ} PLA 0410 PLA ;CLEAN STACK0420 RTS 0430 TEST LDA YLOC0440 STA YHI ;SET YHI DOWN IN MEMORY TO STAʵ}RTING POSITION OF FIGURE0450 PLA 0460 PLA 0470 STA YLO ;LO Y LIMIT0480 STA YLOC ;NEW Y VALUE0490 ʶ} PLA 0500 PLA 0510 BEQ DONE ;0 =STOP AT LIMITS AND 1 =WRAP0520 LP2 LDY YHI0530 LDA (PLAYADR),Y0540 ʷ} LDY YLO0550 STA (PLAYADR),Y0560 LDA #00570 LDY YHI0580 STA (PLAYADR),Y0590 INC YLO0600 INC YHIʸ}0610 DEX 0620 BPL LP20630 RTS #00570 LDY YHI0580 STA (PLAYADR),Y0590 INC YLO0600 INC YHI.10 ;SOURCE.084 LINE 52020 ;X AXIS MOVE TO THE LEFT, WITH WRAP AROUND30 HPOSO0 = 53248 ;HORIZONTAL POSITION REGISTER4κ}0 XLO = $CB50 XLOC = $D460 JUMP = $CC70 *= $060080 PLA 90 LDA #00100 STA XLOC+10110 λ} PLA 0120 PLA 0130 TAX ;PLAYER NUMBER 0-30140 PLA 0150 PLA 0160 STA XLO ;LO LIMIT0170μ} PLA 0180 PLA 0190 STA JUMP ;X AXIS JUMP AMOUNT0200 PLA 0210 PLA ;PRESENT X LOCATION0220 ν} STA XLOC0230 SEC 0240 SBC JUMP0250 CMP XLO0260 BCC TEST ;IF LESS THAN LIMIT THAN TEST FOR STOP OR ξ}WRAP AROUND0270 STA HPOSO0,X0280 STA XLOC0290 PLA 0300 PLA 0310 DONE PLA 0320 PLA ;CLEAR STο}ACK0330 RTS 0340 TEST PLA 0350 PLA 0360 BEQ DONE ;0=STOP AT LIMIT0370 PLA 0380 PLA 0390 STA} HPOSO0,X ;FOR WRAP AROUND STORE THE HI LIMIT0400 STA XLOC0410 RTS LIMIT0370 PLA 0380 PLA 0390 STAN10 ; SOURCEA.084 LINE 53020 ;X AXIS MOVE TO THE RIGHT, WITH WRAP AROUND30 HPOSO0 = 53248 ;HORIZONTAL POSITION REGISTER}40 XHI = $CB50 XLOC = $D460 JUMP = $CC70 *= $060080 PLA 90 LDA #00100 STA XLOC+10110} PLA 0120 PLA 0130 TAX ;PLAYER NUMBER 0-30140 PLA 0150 PLA 0160 STA XHI ;HI LIMIT01}70 PLA 0180 PLA 0190 STA JUMP ;X AXIS JUMP AMOUNT0200 PLA 0210 PLA ;PRESENT X LOCATION022}0 STA XLOC0230 CLC 0240 ADC JUMP0250 CMP XHI0260 BCS TEST ;IF LESS THAN LIMIT THAN TEST FOR STOP O}R WRAP AROUND0270 STA HPOSO0,X0280 STA XLOC0290 PLA 0300 PLA 0310 DONE PLA 0320 PLA ;CLEAR }STACK0330 RTS 0340 TEST PLA 0350 PLA 0360 BEQ DONE ;0=STOP AT LIMIT0370 PLA 0380 PLA 0390 S}TA HPOSO0,X ;FOR WRAP AROUND STORE THE LO LIMIT0400 STA XLOC0410 RTS LIMIT0370 PLA 0380 PLA 0390 SP BNE H40790 LDY #00800 H3 LDA #110810 H1 LDY #0 ;RESET EVERY TIME NOT 130830 H4 STY FLAG0840 LDY YHOLD:}0850 STA (STG),Y0860 LDA SCN0870 SEC 0880 SBC #400890 STA SCN ;NEXT SCREEN POSITION0900 BCS :}GT40910 DEC SCN+10920 GT4 INY 0930 STY YHOLD0940 CPY #196 ;192+40950 BNE GT2 ;GO GET NEXT SCREEN :}POSITION0960 JSR CIOV ;PRINT IT0970 LDA SCNH0980 STA SCN0990 LDA SCNH+11000 STA SCN+1 ;RESTORE :}SCREEN ADDRESS1010 INC COUNT1020 LDA COUNT1030 CMP #401040 BNE GT51050 RTS 0 SCNH = $D460 STG 8eITION0980 JSR CIOV ;PRINT IT0990 LDA SCNH1000 STA SCN1010 LDA SCNH+11020 STA SCN+1 ;RESTORE SCR>}EEN ADDRESS1030 DEC COUNT1040 BPL GT51050 RTS *= $060040 SCN = $CB50 SCNH = $D460 STG = <>